2012-12-18 5 views
13

In SQL Server 2012, ho una tabella my_table con colonne state, month, ID e sales.Somma valori da più righe in una riga

Il mio obiettivo è unire righe diverse che hanno lo stesso state, month, ID in una riga sommando la colonna sales di queste righe selezionate nella riga unita.

Ad esempio:

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 

questo quello che dovrei ottenere

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 

ho fatto qualche ricerca e ho trovato che il sé join dovrebbe fare qualcosa di simile a quello che sono supposto per ottenere.

+4

La [documentazione] (http://msdn.microsoft.com/en-us/library/ms187810.aspx) per 'SUM()' ha alcuni esempi chiari – Pondlife

risposta

16

A meno che non mi manca qualcosa nei requisiti, perché non basta usare una funzione di aggregazione con un GROUP BY:

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

Vedere SQL Fiddle with Demo

Il risultato è:

| 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

Considerando lì dovrebbe essere un indice sulla colonna id, questa query sarebbe una soluzione migliore: