2013-10-01 50 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版本 –