2015-04-16 5 views
2

У меня есть эта таблицаСоздание столбцов из строк

ID  colname  F1  F2 F3  F4  
1  P1   1   2  3  4 
1  P2   5   6  7  8 
1  P3   9   10 11  12 
1  P4   13  14 15  16 
2  P1   17  18 19  20 
2  P2   21  22 23  24 
2  P3   25  26 27  28 
2  P4   29  30 31  32 

Я пытаюсь этот результат, значение Р соответствует Fn

ID  P1  P2  P3  P4 
1  1  6  11  16 
2  17  22  27  32 

Пожалуйста, вы можете дать мне несколько советов и ключевые слова о том, как он мог делать в SQL Server?

Я играл с Pivot, но это путь?

ответ

3

Ну вы можете сделать что-то вроде этого:

select 
    id, 
    max(case when colname = 'P1' then F1 end) as P1, 
    max(case when colname = 'P2' then F2 end) as P2, 
    max(case when colname = 'P3' then F3 end) as P3, 
    max(case when colname = 'P4' then F4 end) as P4 
from Table1 
group by id 

sql fiddle demo

+0

спасибо вам большое и просто, макс только для того, чтобы избежать предложения Group by right? – user1492051

+1

Да, вам нужно как-то заполнить –

1

Если вы хотите решение, которое использует PIVOT:

SELECT * 
FROM (
    SELECT ID,colname,value 
    FROM MyTable 
    UNPIVOT (value FOR col in ([F1],[F2],[F3],[F4])) a 
    WHERE REPLACE(col,'F','P') = colname 
) b 
PIVOT (MAX(value) FOR colname in ([P1],[P2],[P3],[P4])) c 

UNPIVOT последовал PIVOT метод чрезвычайно универсальный для трансформаций, но, как правило, это проще и понятнее, чем на примере Романа.

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