有一个数据表A
有字段 id (整型),AddTime(datetime),price(decimal)
现在有一个需求,输入年份,如2011-2015,那么就要查出2011,2012,2013,2014,2015年
每个ID的price的总和,如果该年份没有记录,则显示0
例如A有数据
1 2012-03-01 00:00:00 960
1 2013-04-02 00:00:00 750
1 2013-06-02 00:00:00 600
2 2013-06-02 00:00:00 200
2 2014-06-02 00:00:00 400
那么查询2011-2015的结果应该是
2011 2012 2013 2014 2015
1 0 960 1350 0 0
2 0 0 200 400 0
------解决思路----------------------
http://blog.csdn.net/hdhai9451/article/details/5026933
------解决思路----------------------
DECLARE @Start VARCHAR(4),@End VARCHAR(4)
SET @Start='2011'--设置开始
SET @End='2015'--设置结束
SET @End=@End+1
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT id'
SELECT @SQL=@SQL+',ISNULL(SUM(CASE WHEN AddTime>='''+D+'-01-01'' AND AddTime<'''+D1+'-01-01''THEN price END),0)['+D+']'
FROM(
SELECT CONVERT(VARCHAR(4),@Start+number)D
,CONVERT(VARCHAR(4),@Start+number+1)D1
FROM master..spt_values
WHERE type='P' AND number<(@End+0)-@Start
)T
SET @SQL=@SQL+'FROM A
Where AddTime>='''+@Start+'-01-01''AND AddTime<'''+@End+'-01-01''
GROUP BY id
Order by id'
--SELECT @SQL--如果想看下内容是什么,反注释这一句就可以了,把内容COPY出来到看下即可
EXEC(@SQL)