首页 新闻 会员 周边 捐助

sql 行列转换

0
[已解决问题] 解决于 2015-08-25 10:53

请问各位大神怎么将这4条数据以年月形式进行行列转换,例如:

         2015-06   2015-07      

总计        3     1     

风吹一点云的主页 风吹一点云 | 菜鸟二级 | 园豆:209
提问于:2015-08-25 09:40
< >
分享
最佳答案
1

SELECT * FROM (
SELECT SUBSTRING(CONVERT(varchar(100), CreateTime, 23),1,7) yearmonth,COUNT(1) cnt
FROM dbo.SpecCustomField GROUP BY SUBSTRING(CONVERT(varchar(100), CreateTime, 23),1,7)
)s PIVOT(MAX(cnt) FOR yearmonth in ([2015-06],[2015-07]))t

奖励园豆:5
小白菜T | 小虾三级 |园豆:564 | 2015-08-25 09:50

PIVOT(MAX(cnt) FOR yearmonth in ([2015-06],[2015-07]))t

风吹一点云 | 园豆:209 (菜鸟二级) | 2015-08-25 10:34

PIVOT(MAX(cnt) FOR yearmonth in ([2015-06],[2015-07]))t

风吹一点云 | 园豆:209 (菜鸟二级) | 2015-08-25 10:34

PIVOT(MAX(cnt) FOR yearmonth in ([2015-06],[2015-07]))t

列[2015-06],[2015-07] 怎么改成动态的,  

PIVOT(MAX(cnt) FOR yearmonth in ('['+CONVERT(varchar(100), CreateTime, 23),1,7)+']',)t

这样拼接不对啊

风吹一点云 | 园豆:209 (菜鸟二级) | 2015-08-25 10:35

@风吹一点云: in ([2015-06],[2015-07])里[2015-06]是列名  不能写成in ('[2015-06]')的形式

如果要动态的话 可以拼sql来实现

DECLARE @yearmonth VARCHAR(200)
SET @yearmonth='[2015-06],[2015-07]' --自己拼就好了
DECLARE @sql NVARCHAR(1000)
SET @sql=N'
SELECT * FROM (
SELECT SUBSTRING(CONVERT(varchar(100), CreateTime, 23),1,7) yearmonth,COUNT(1) cnt
FROM tbl GROUP BY SUBSTRING(CONVERT(varchar(100), CreateTime, 23),1,7)
)s PIVOT(MAX(cnt) FOR yearmonth in ('+@yearmonth+'))t'
EXEC(@sql)

小白菜T | 园豆:564 (小虾三级) | 2015-08-25 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册