2016-05-16 2 views
0

Название таблицы int_table. Колонки col_name, col_valueБез агрегации сводная таблица SQL Server

col_name col_value 
---------------------- 
A   aa 
B   bb 
C   cc 
D   dd 
D   ddd 
E   eee 

Мне нужен выход, как этот

A  B   C   D  E 
--------------------------------------------- 
aa  bb   cc   dd  eee 
           ddd  

Это примеры значений. В моем столе более 30 строк.

Это моя попытка:

select * 
from int_table 
pivot (max(col_value) 
     for col_name in (A, B, C, D, E)) as tt 

с функцией агрегации он показывает ошибку.

Как это получить, используя pivot?

Я использую SQL Server 2012

ответ

3

Попробуйте это:

select A,B,C,D,E   
from (
    select col_name, col_value, 
      row_number() over (partition by col_name order by col_value) as rn 
    from int_table 
) as src 
pivot (max(col_value) for col_name in (A,B,C,D,E)) as pvt 

Хитрость здесь заключается в использовании вычисляемого столбца производится путем ROW_NUMBER оконной функции, таким образом, чтобы различать между записями, имеющими тот же col_name значение ,

Demo here

+1

+1 * Примечание для OP *: чтобы получить пустые значения вместо 'NULLS' вы можете использовать' COALESCE' в следующем: 'выберите COALESCE (A, '') AS A, \t COALESCE (В '') как В, \t СОАЬЕЗСЕ (с '') КАК с, \t СОАЬЕЗСА (D '') AS D, \t СОАЬЕЗСОМ (Е '') AS E из (... .' –

Смежные вопросы