ORACLE 10 嗨,我在这里阅读了几篇文章,我没有找到一个简单的解决方案
我有这些数据:
Transacion_ID GROSS_AMOUNT DISCOUNT_AMOUNT
1, 10 , -1
2, 1002 , -14
3, 36 , -5
我需要转移才能获得
Transacion_ID TYPE AMOUNT
1, GROSS , 10
1, DISC , -1
2, GROSS , 1002
2, DISC , -14
3, GROSS , 36
3, DISC , -5
我的第一种方法是将它分成两个查询,然后只是UNION ALL两个结果,但每5小时运行一次,并且有几个连接,所以拆分意味着几乎重复的执行时间。我在oracle 10中寻找像pivot / unpivot这样的东西。
答案 0 :(得分: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
此查询基于提到的here
方法