在SQL Server 2012中,我有一个包含my_table
列和state, month, ID
列的表sales
。
我的目标是将具有相同state, month, ID
的不同行合并为一行,同时将这些选定行的sales
列合并到合并行中。
例如:
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
我做了一些研究,我发现自我加入应该做一些类似于我应该得到的东西。
答案 0 :(得分:17)
除非我遗漏了要求中的内容,否则为什么不使用带GROUP BY
的聚合函数:
select state, month, id, sum(sales) Total
from yourtable
group by state, month, id
order by id
结果是:
| STATE | MONTH | ID | TOTAL |
--------------------------------
| FL | July | 1 | 10000 |
| FL | June | 1 | 21000 |
| CA | April | 32 | 2000 |
| MI | April | 32 | 13000 |
| TX | January | 50 | 1000 |
答案 1 :(得分:3)
考虑到列id
上应该有一个索引,这个查询将是一个更好的解决方案:
select state, month, id, sum(sales) Total
from yourtable
group by id, state, month
order by id