2013-10-01 53 views
1

ORACLE 10 您好,我在這裏讀的幾個職位,我沒有拿出一個簡單的解決方案ORACLE逆透視列行

我有這樣的數據:

Transacion_ID GROSS_AMOUNT DISCOUNT_AMOUNT 
1,    10 ,   -1 
2,    1002 ,  -14 
3,    36 ,   -5 

,我需要UNPIVOT獲得

Transacion_ID TYPE  AMOUNT 
1,    GROSS , 10 
1,    DISC , -1 
2,    GROSS , 1002 
2,    DISC , -14 
3,    GROSS , 36 
3,    DISC , -5 

我的第一種方法是在兩個查詢拆分此,然後就UNION ALL boths的結果,但這種運行每5小時,有幾個連接,因此劈裂我幾乎重複執行時間。我一直在尋找類似樞軸/ UNPIVOT在Oracle 10

回答

1

試試這個

Select * From (
Select 
Transacion_ID, 
Case When C.lvl = 1 Then 'GROSS' 
    When C.lvl = 2 Then 'DISC' 
End TYPE, 
Case When C.lvl = 1 Then GROSS_AMOUNT 
    When C.lvl = 2 Then DISCOUNT_AMOUNT 
End AMOUNT 
From T 
cross join (select level lvl from dual connect by level<=2) c  
) where amount is not null 
order by 1 

SQL DEMO

此查詢基於方法中所提到here

+0

我不相信'UNPIVOT '操作符在10.2中存在 - 我相信它是在11.1中添加的。 –

+0

@JustinCave,沒錯。我沒有注意到問題是10g,我更新了我的SQL到10G版本 –