2010-09-09 3 views
1

У меня есть таблица со значениями, как это,группы по п запрос

я хочу группу cusotmer имени где, как сумма локальной суммы должна превышать 50000 еще мне нужно, чтобы удалить эти записи, которые не удовлетворяют?

Как достичь этого в SQL Server 2005?

TRN 259 3 9/9/2010 6622 68667(Rs) ABHIJIT KATARE 
TRN 260 3 9/9/2010 6622 14635(Rs) ABHIJIT KATARE 
TRN 235 3 9/9/2010 6586 68128 AJAY PARASRAMPURIA 
TRN 236 3 9/9/2010 6586 14490 AJAY PARASRAMPURIA 
TRN 257 3 9/9/2010 6621 68667 ANAND DESAI 
TRN 258 3 9/9/2010 6621 14635 ANAND DESAI 
TRN 287 3 9/9/2010 6817 119095 ANAND KATAKAM 
TRN 242 3 9/9/2010 6594 95689 ANILKUMAR MUTHUNPARA 
TRN 211 3 9/9/2010 6507 52239 ARBIND KUMAR GUPTA 
TRN 212 3 9/9/2010 6538 63183 ASHOK KELKAR 
TRN 185 3 9/9/2010 6431 140610 BANSAL Y.K 
TRN 186 3 9/9/2010 6431 46845 BANSAL Y.K 
TRN 248 3 9/9/2010 6600 72565 BENNO HANS LUKE 

ответ

0

Это покажет вам клиентов, которые имеют меньше, чем 50000:

select CustomerName, sum(LocalAmount) 
from MyTable 
group by CustomerName 
having sum(LocalAmount) <= 50000 

Обратите внимание, что вы лучше группировка по CustomerID, если есть один, так как там может быть одинаковые имена. Затем вы можете удалить, как это сделать:

delete from MyTable 
where CustomerID in (
    select CustomerID 
    from MyTable 
    group by CustomerID 
    having sum(LocalAmount) <= 50000 
) 
+0

Как вы знаете, есть столбец CustomerID? и даже если есть один, это может быть несколько идентификаторов, имеющих одинаковое отображаемое имя. Я видел это в системах, где один клиент покупает другой, они меняют отображаемое имя, но FK все еще используют исходный ID –

+0

. Я этого не знаю, это предположение - вот почему в первом примере используется имя клиента. – RedFilter

0

Попробуйте это для избранных:

SELECT * FROM Table 
GROUP BY CustomerName 
HAVING SUM(LocalAmount) > 50000 

Попробуйте для удаления (модифицированная версия @ RedFilter'S):

delete from MyTable 
where CustomerName in (
    select CustomerName 
    from Table 
    group by CustomerName 
    having sum(LocalAmount) <= 50000 
) 
0

select * from MyTable group by CustomerName having sum(LocalAmount) > 50000

0

, чтобы увидеть использование хороших рядов:

SELECT 
    cusotmerName ,SUM(localAmount) 
    FROM YourTable 
    GROUP BY cusotmerName 
    HAVING SUM(localAmount)>50000 

удалить плохие строки используйте:

DELETE YourTable 
WHERE 
    CustomerName IN (SELECT 
          cusotmerName 
          FROM YourTable 
          GROUP BY cusotmerName 
          HAVING SUM(localAmount)<50000 
         ) 
0

этот синтаксис выглядит немного странно, но это работает!

;with cte as 
(
select sum(LocalAmount) over (partition by cname) s 
from yourtable 
) 
delete from cte where s <= 50000