2012-12-18 17 views
13

W SQL Server 2012, mam tabelę my_table, która ma kolumny state, month, ID i sales.Wartości sum z wielu wierszy w jednym wierszu

Moim celem jest scalenie różnych wierszy, które mają ten sam state, month, ID w jednym rzędzie, podczas sumowania kolumny sales tych wybranych wierszy w scalonym wierszu.

Na przykład:

state month ID sales 
------------------------------- 
FL  June  0001 12,000 
FL  June  0001 6,000 
FL  June  0001 3,000 
FL  July  0001 6,000 
FL  July  0001 4,000 
TX  January 0050 1,000 
MI  April 0032 5,000 
MI  April 0032 8,000 
CA  April 0032 2,000 

To co mam dostać

state month ID sales 
------------------------------- 
FL  June  0001 21,000 
FL  July  0001 10,000 
TX  January 0050 1,000 
MI  April 0032 13,000 
CA  April 0032 2,000 

zrobiłem niektóre badania i okazało się, że samo sprzężenie ma robić coś podobnego do tego, co ja powinien dostać.

+4

[Dokumentacja] (http://msdn.microsoft.com/en-us/library/ms187810.aspx) dla 'SUM()' ma kilka wyraźnych przykładów – Pondlife

Odpowiedz

16

ile brakuje mi czegoś na temat wymagań, dlaczego nie wystarczy użyć funkcji zagregowanego z GROUP BY:

select state, month, id, sum(sales) Total 
from yourtable 
group by state, month, id 
order by id 

Zobacz SQL Fiddle with Demo

Wynikiem jest:

| STATE | MONTH | ID | TOTAL | 
-------------------------------- 
| FL | July | 1 | 10000 | 
| FL | June | 1 | 21000 | 
| CA | April | 32 | 2000 | 
| MI | April | 32 | 13000 | 
| TX | January | 50 | 1000 | 
3

Zważywszy tam powinien być indeks na kolumnie id, to zapytanie byłoby lepszym rozwiązaniem:

select state, month, id, sum(sales) Total 
from yourtable 
group by id, state, month 
order by id 
Powiązane problemy