2017-12-07 6 views
0

によってグループ化、列に行をトランスポーズ:TSQLは、私は、このデータの設定したコラム

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でどうすればいいですか? おかげ

答えて

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) 
関連する問題