web-dev-qa-db-ja.com

複数の行の値を合計して1つの行にする

SQL Server 2012には、my_table列とsales列を持つテーブルstate, month, IDがあります。

私の目標は、これらの選択された行のsales列をマージされた行に合計しながら、同じstate, month, IDを持つ異なる行を1つの行にマージすることです。

例えば:

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

これは私が得ることになっているもの

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

私はいくつかの研究を行いましたが、自己結合は私が得ようとしていることに似た何かをすることになっていることがわかりました。

14
msallem

要件に何かが欠けていない限り、単にGROUP BY

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

SQL Fiddleデモあり

結果は次のとおりです。

| 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

idにインデックスが必要であることを考慮すると、このクエリはより良い解決策になります。

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