2013-02-08 131 views
1

我使用Oracle 11gR2的窗口服務器上運行2008 R2使用SQL樞軸

我有這樣

year code value 
    ---- ---- ----- 
    1991  1  v1 
    1991  2  v2 
    1991  3  v3 

    1992  1  v4 
    1992  2  v5 
    1992  3  v6 

    ... 
    2050 

一個表中的代碼列可以是從1到10。

我會喜歡看最後的輸出爲(列值爲1到10)

year 1 2 3 4 .... 10 
---- -- -- -- --  -- 
1991 v1 v2 v3 null.......null 
1992 v4 v5 v6. ...etc 

我該如何做pivoting來得到上述格式的結果?提前致謝。

回答

5

不使用PIVOT一個簡單的方法是使用CASE

SELECT year, 
     MIN(CASE WHEN code = 1 THEN value END) AS Col1, 
     MIN(CASE WHEN code = 2 THEN value END) AS Col2, 
     MIN(CASE WHEN code = 3 THEN value END) AS Col3, 
     MIN(CASE WHEN code = 4 THEN value END) AS Col4, 
     MIN(CASE WHEN code = 5 THEN value END) AS Col5, 
     MIN(CASE WHEN code = 6 THEN value END) AS Col6, 
     MIN(CASE WHEN code = 7 THEN value END) AS Col7, 
     MIN(CASE WHEN code = 8 THEN value END) AS Col8, 
     MIN(CASE WHEN code = 9 THEN value END) AS Col9, 
     MIN(CASE WHEN code = 10 THEN value END) AS Col10 
FROM YourTable 
GROUP BY year 

隨着PIVOT,這將是這樣的:

SELECT * 
FROM (SELECT year, code, value FROM YourTable) 
PIVOT (MIN(value) FOR code IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); 
3

的Oracle 11g具有可以用來變換一個PIVOT功能數據轉換成行:

select * 
from 
(
    select year, code, value 
    from yourtable 
) 
pivot 
(
    max(value) 
    for code in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') 
) piv 

SQL Fiddle with Demo

2

在11g中,你可以使用pivot

SELECT * 
FROM t 
PIVOT (max(value) as value FOR (code) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) 
+0

所有的答案都是偉大的工作太棒了!!!!!!多謝你們!!! – cableload 2013-02-08 17:05:05