2015-04-16 18 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 

我試圖產生這種結果的pn值對應於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

謝謝你好,簡單,max只是爲了避免group by子句的權利? – 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方法對於轉換非常靈活,但通常在羅馬例子中手動完成它更容易和更具可讀性。