web-dev-qa-db-fra.com

Additionner les valeurs de plusieurs lignes en une seule ligne

Dans SQL Server 2012, j'ai une table my_table qui a des colonnes state, month, ID et sales.

Mon objectif est de fusionner différentes lignes qui ont le même state, month, ID dans une ligne tout en additionnant la colonne sales de ces lignes sélectionnées dans la ligne fusionnée.

Par exemple:

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

C'est ce que je suis censé obtenir

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

J'ai fait quelques recherches et j'ai découvert que l'auto-jointure est censée faire quelque chose de similaire à ce que je suis censé obtenir.

14
msallem

À moins que je manque quelque chose dans les exigences, pourquoi ne pas simplement utiliser une fonction d'agrégation avec un GROUP BY:

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

Voir SQL Fiddle with Demo

Le résultat est:

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

Étant donné qu'il devrait y avoir un index sur la colonne id, cette requête serait une meilleure solution:

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