ORACLE将列拆分为行

时间:2013-10-01 20:04:03

标签: sql oracle oracle10g

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

1 个答案:

答案 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

SQL DEMO

此查询基于提到的here

方法