请数据库高手们帮帮忙 看一下~ 这段代码
DECLARE @ColumnNames VARCHAR(3000)
SET @ColumnNames=''
SELECT
@ColumnNames = @ColumnNames + '[' + stationname + '],'
FROM
(
SELECT DISTINCT stationname FROM rec_PM
) t
SET @ColumnNames= LEFT(@ColumnNames, LEN(@ColumnNames)-1)
DECLARE @selectSQL NVARCHAR(3000)
SET @selectSQL=
'SELECT stationid,date,{0} FROM
(
SELECT stationid,date,pm25,stationname FROM rec_PM
) p
Pivot( Max(pm25) For stationname in ({0})) AS pvt
order BY date'
SET @selectSQL= REPLACE(@selectSQL,'{0}',@ColumnNames)
exec sp_executesql @selectSQL
end
调用这个存储过程现在能基本上实现我要的效果,但是有个问题啊,就是行列转换之后是这个情况
date 1# 2# 3#
2013-3-13 20 null null
2013-3-13 null 30 null
2013-3-13 null null 40
2013-3-14 22 null null
2013-3-14 null 32 null
2013-3-14 null null 42
我现在想要的是这个效果
date 1# 2# 3#
2013-3-13 20 30 40
2013-3-14 22 32 42
请问高人 我应该怎么改代码 谢谢~
------解决方案--------------------这里先聚合
SET @selectSQL=
'SELECT stationid,date,{0} FROM
(
SELECT stationid,date,sum(pm25)pm25,stationname FROM rec_PM group by stationid,date,stationname
) p
Pivot( Max(pm25) For stationname in ({0})) AS pvt
order BY date'
------解决方案--------------------源数据贴出来