2017-12-07 1 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) 
관련 문제