当前位置: 代码迷 >> Sql Server >> pivot多行多列转换的有关问题,动态的
  详细解决方案

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

热度:49   发布时间:2016-04-24 08:59:21.0
pivot多行多列转换的问题,动态的
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中的费用不固定


------解决思路----------------------
--动态
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 方便