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中的费用不固定
------解决思路----------------------
--动态我一直觉得PIVOT不如CASE 方便
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)