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中寻找诸如数据透视/取消透视之类的东西。
试试这个
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演示
该查询基于此处提到的方法