2016-11-08 45 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