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 

私の最初のアプローチは、これを 2 つのクエリに分割し、両方の結果を UNION ALL にすることでしたが、これは 5 時間ごとに実行され、いくつかの結合があるため、分割すると実行時間がほぼ重複します。Oracle 10 でピボット/アンピボットのようなものを探していました。

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 に答える