或者将第一种方法用动态SQL语句写的话,也可以达到结果集的列数是动态的效果.

解决方案 »

  1.   

    --建立测试环境
    Create Table TEST
    (月 Int,
     日 Int,
     气温 Numeric(10,1))
    --插入数据
    Insert TEST Values(1,   1,   23.5)
    Insert TEST Values(1,   2,   25.9)
    Insert TEST Values(1,   3,   24.8)
    Insert TEST Values(2,   1,   25.0)
    Insert TEST Values(2,   2,   24.7)
    Insert TEST Values(2,   3,   23.1)
    Insert TEST Values(3,   1,   24.0)
    Insert TEST Values(3,   2,   26.9)
    Insert TEST Values(3,   3,   20.6)
    GO
    --测试
    Declare @S Nvarchar(4000)
    Set @S=N'Select 日 '
    Select @S=@S+','+N'SUM(Case 月 When '+ Rtrim(月) +N' Then 气温 Else 0 End) As ['+Rtrim(月)+N'月]'
    from (Select Distinct 月 from TEST) A Order By 月
    Select @S=@S+N' From TEST Group By 日 Order By 日'
    EXEC(@S)
    --删除测试环境
    Drop Table TEST
    --结果
    /*
    日 1月 2月 3月
    1 23.5 25.0 24.0
    2 25.9 24.7 26.9
    3 24.8 23.1 20.6
    */
      

  2.   

    谢谢paoluo,我想问一下Set @S=N'Select 日 '
    里面的N是什么意思?