2016-11-08 81 views
0

我有以下數據Pivot Unpivot問題?

Col1, Col2, Col3, Col4, Col5       
1, P, W, M, adhfggh     
1, P, W, M, fdasdfd      
1, P, W, M, retretre 

所以,我想獲得這個

Col1, Col2, Col3, Col4, ColA, ColB, ColC   
1, P, W, M, adhfggh, fdasdfd, retretre 

我應該嘗試這樣的事情,但不知道要放什麼東西在括號

select Col1, Col2, Col3, Col4, Col5 from tableA   
Unpivot 
(Col1, Col2, Col3, Col4 for Col5 in (, ,)) as UnPvt 

我很感激任何幫助。

+0

您正在使用哪些DBMS? –

回答

0

你沒有指定你使用的是什麼版本的SQL的,所以這是T-SQL和2008年後

這種動態的支點是altered from this answer &將格式化您的要求,任何SQL Server上會工作。您可能還希望查看STUFF函數

CREATE TABLE #T 
        ( Col1 int 
        ,Col2 [nchar](3) 
        ,Col3 [nchar](3) 
        ,Col4 [nchar](3) 
        ,Col5 [nchar](10) 
        ) 

    Insert Into #T 
    Values 
    (1,'P','W','M','adhfggh') 
    ,(1,'P','W','M','fdasdfd') 
    ,(1,'P','W','M','retretre'); 

    DECLARE @cols AS NVARCHAR(MAX), 
      @query AS NVARCHAR(MAX); 

    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Col5) 
         FROM #T c 
         FOR XML PATH(''), TYPE 
         ).value('.', 'NVARCHAR(MAX)') 
         ,1,1,'') 

    set @query = 'SELECT Col1,Col2,Col3,Col4, ' + @cols + ' from 
     (
      select Col1, 
        Col2, 
        Col3, 
        Col4, 
        Col5      
      from #T  
     ) x 
     pivot 
     (
      max(Col5) 
      for Col5 in (' + @cols + ') 
     ) p ' 


    execute(@query) 

    drop table #T 
+0

感謝您的幫助,但我想知道是否有可能只使用查詢.... SELECT WHERE FROM沒有變量(T-SQL)... – piva1970

+0

如果您想旋轉'Col5',您需要知道有多少行有。如果你總是有相同數量的行,例如「3行」,那麼是的,這是可能的。如果你將有多於/少於3行,那麼你需要使用動態SQL&變量是必需的 –

+0

Col5可以有1到3行...你能告訴我看它如何總是有3行。讓我們來看看如果只有一行有一個值的情況下,其他兩列有空值的例子。 – piva1970