2012-12-18 45 views
13

在SQL Server 2012中,我有一个表my_table,其列state, month, IDsales将多行中的总和值合并为一行

我的目标是将具有相同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 

我做了一些研究,我发现,自联接应该做同样的事情对我是什么应该得到。

+4

SUM()的[documentation](http://msdn.microsoft.com/en-us/library/ms187810.aspx)有一些清晰的例子 – Pondlife

回答

16

除非我缺少的需求的东西,为什么不使用聚合函数与GROUP BY

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

SQL Fiddle with Demo

结果是:

| 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

考虑有应该是列id上的索引,该查询将是更好的解决方案:

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