行列转换数据统计(月份)SQL请问
行列转换数据统计(月份)SQL请教
大家好!
如下数据表 CO
CO_CustomerID CO_Date CO_Qty
A 2011-10-21 200
B 2011-11-5 100
C 2011-11-21 160
A 2011-11-21 56
C 2011-11-28 600
C 2011-12-8 3600
......
我想实现按客户年度2011全年月份统计出如下(无记录月份补为null):
客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 客户合计
A 200 56 256
B 100 100
C 760 3600 4360
......
用一个SQL语句能否实现按客户分组统计一年12个月数量总和?
谢谢
------解决方案--------------------
大家好!
如下数据表 CO
CO_CustomerID CO_Date CO_Qty
A 2011-10-21 200
B 2011-11-5 100
C 2011-11-21 160
A 2011-11-21 56
C 2011-11-28 600
C 2011-12-8 3600
......
我想实现按客户年度2011全年月份统计出如下(无记录月份补为null):
客户 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 客户合计
A 200 56 256
B 100 100
C 760 3600 4360
......
用一个SQL语句能否实现按客户分组统计一年12个月数量总和?
谢谢
------解决方案--------------------
- SQL code
select * from ( select CO_CustomerID,convert(varchar(6),CO_Date,112) YM,SUMQty=SUM(CO_Qty)OVER(partition by CO_CustomerID),CO_Qty) t pivot (SUM(CO_Qty) for YM IN([201101],[201102],....[201112])) pvt
------解决方案--------------------
- SQL code
declare @sql varchar(8000) set @sql = 'select CO_CustomerID , ' select @sql = @sql + ' , sum(case convert(varchar(6),CO_Date,112) when ''' + convert(varchar(6),CO_Date,112) + ''' then CO_Qty else 0 end) [' + convert(varchar(6),CO_Date,112) + ']' from (select distinct convert(varchar(6),CO_Date,112) from tb) as a set @sql = @sql + ',sum(co_qty) as 合计 from tb group by CO_CustomerID' exec(@sql)
------解决方案--------------------
+1