日期:2014-05-17  浏览次数:20450 次

请数据库高手们帮帮忙 看一下~ 这段代码
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'
------解决方案--------------------
源数据贴出来