pivot多行多列转换的问题,动态的

ljupin 2015-05-13 03:11:11
roomid name, 费用 滞纳金
1 水费 50 3
1 电费 25 5
2 水费 40 2
2 电费 30 5
1 物业费 15 0
。。。。。。。

---------------------------------------------------------------------------------------------------------------
name字段中的费用名称不固定,需要得出下面的数据,转换出来的列不固定

roomid 水费 水费滞纳金 电费 电费滞纳金 物业费 物业费滞纳金
1 50 3 25 5 15 0
2 40 2 30 5 0 0
。。。。。。。。。。

请看看使用pivot如何做到这种行转列,关键是name中的费用不固定

...全文
395 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-05-13
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(MAX),@COLUMN VARCHAR(MAX)
SET @SQL=''
SET @COLUMN=''
SELECT @SQL=@SQL+',['+name+'],['+name+'滞纳金]'
	,@COLUMN=@COLUMN+'+ISNULL(['+name+'],0)+ISNULL(['+name+'滞纳金],0)'
FROM TB GROUP BY name
SET @SQL='SELECT *,'+STUFF(@COLUMN,1,1,'')+'[合计] FROM(SELECT roomid,name,费用 FROM TB UNION ALL SELECT roomid,name+''滞纳金'',滞纳金 FROM TB)T PIVOT(SUM(费用)FOR name IN('
+STUFF(@SQL,1,1,'')+'))P'
--PRINT @SQL
EXEC(@SQL)
我一直觉得PIVOT不如CASE 方便
ljupin 2015-05-13
  • 打赏
  • 举报
回复
貌似对了,结尾能加个合计吗?
还在加载中灬 2015-05-13
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(MAX)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL=''
SELECT @SQL=@SQL+',['+name+']'+',['+name+'滞纳金]'
FROM TB GROUP BY name
SET @SQL='SELECT * FROM(SELECT roomid,name,费用 FROM TB UNION ALL SELECT roomid,name+''滞纳金'',滞纳金 FROM TB)T PIVOT(SUM(费用)FOR name IN('
+STUFF(@SQL,1,1,'')+'))P'
PRINT @SQL
EXEC(@SQL)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧