一尘不染

ORACLE将数据透视表移到行

sql

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中寻找诸如数据透视/取消透视之类的东西。


阅读 141

收藏
2021-03-17

共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演示

该查询基于此处提到的方法

2021-03-17