1

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 的东西。

4

1 回答 1

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

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

于 2013-10-01T20:11:18.980 回答