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.
À 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 |
É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