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

Какая СУБД вы используете? –

ответ

0

Вы не указали, какую версию SQL вы используете, так что это T-SQL и будет работать на любом SQL Server после 2008

Этих динамический стержень был altered from this answer & отформатирует ваши требования. Вы также можете ознакомиться с функцией 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 строки», то да, это возможно. Если у вас будет больше/меньше трех строк, вам необходимо использовать динамические SQL и переменные. –

+0

Col5 может иметь от 1 до 3 строк ... Не могли бы вы показать мне, как это будет выглядеть, если у вас всегда есть три строки. Посмотрим на пример, где у нас есть значение Null для других двух столбцов, если есть только одна строка, которая имеет значение. – piva1970