当前位置: 代码迷 >> Sql Server >> SQL2008涉及到一些行转列的,不太会用,解决方法
  详细解决方案

SQL2008涉及到一些行转列的,不太会用,解决方法

热度:10   发布时间:2016-04-24 09:07:41.0
SQL2008涉及到一些行转列的,不太会用,
有一个数据表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)
  相关解决方案