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

请教各位高手一个按月统计合同金额问题
表ContractInfo:
合同名称   ContractName
支付日期   PayTime(格式为2007-08-22)
支付金额   PayMoney
如何实现按月显示支付金额?显示列表如下:

合同名称   1月(金额)   2月(金额)……12月(金额)

------解决方案--------------------
考虑年份.

declare @sql varchar(8000)
set @sql = 'select ContractName as ' + '合同名称 '
select @sql = @sql + ' , sum(case left(convert(varchar(10),支付日期,120),6) when ' ' ' + left(convert(varchar(10),支付日期,120),6) + ' ' ' then PayMoney else 0 end) [ ' + left(convert(varchar(10),支付日期,120),6) + '] '
from (select distinct left(convert(varchar(10),支付日期,120),6) from ContractInfo) as a
set @sql = @sql + ' from ContractInfo group by ContractName '
exec(@sql)
------解决方案--------------------
我写的就是考虑了年份啊,不是2007年么?哪里有问题?
------解决方案--------------------
select year(PayTime) 年份,合同名称,
[1月(金额)]=sum(case when month(paytime)=1 then PayMoney else 0 end),
[2月(金额)]=sum(case when month(paytime)=2 then PayMoney else 0 end),
...
[12月(金额)]=sum(case when month(paytime)=12 then PayMoney else 0 end)
from ContractInfo
group by year(PayTime),合同名称