【问题标题】:Tsql transpose rows to columns, grouping by a columnTsql 将行转置为列,按列分组
【发布时间】:2017-12-07 15:46:40
【问题描述】:

我有这组数据:

cId    item     value
-------------------------------------
1      A        string1
2      A        string2
3      A        string3
1      B        string4
2      B        string5
1      C        string6
3      C        string7

为了得到这个结果,我会将item 广告cId 行转换成列:

cId        A           B             C
----------------------------------------------
1          string1     string4       string6  
2          string2     string5       NULL
3          string3     NULL          string7

itemcId 行不固定,所以我认为我需要一些动态 sql 来进行旋转。 我怎么能在 tsql 中做? 谢谢

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    下面会做:

    DECLARE @pivotFields varchar(255) =
        STUFF(
            (
                SELECT ', [' + item + ']'
                FROM
                    (
                        SELECT DISTINCT item
                        FROM YourTable
                    ) Q
                ORDER BY item
                FOR XML PATH ('')
            )
            , 1, 2, ''
        )
    
    DECLARE @sql varchar(1000) =
        '
            SELECT cId, ' + @pivotFields + '
            FROM
                (
                    SELECT
                        cId
                        , item
                        , value
                    FROM YourTable
                ) Q
                PIVOT
                (
                    MAX(value)
                    FOR item IN (' + @pivotFields + ')
                ) P
        '
    
    EXEC (@sql)
    

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 1970-01-01
      • 2013-03-31
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多