日期:2014-05-18  浏览次数:20489 次

行列转换数据统计(月份)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个月数量总和?
谢谢  


------解决方案--------------------
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
探讨
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……