2016-12-05 22 views
-1

私はPIVOT & UNPIVOTをよく知らないです。誰も私がこの転置を助けることができますか?Oracle SQLのPIVOT&UNPIVOT

No.  Date A B C C_R 
1234 15-Nov 0 0 10 100 
5678 15-Nov 0 5 0 0 

任意の私は、クエリを作る助けてくださいでした:私はこのようなデータが必要

No.  Date Type Amount Amount_R 
1234 15-Nov A   0  0 
1234 15-Nov B   0  0 
1234 15-Nov C  10  10 
5678 15-Nov B   5  0 

:私はこのようなデータをしました。

+3

C_Rは新しい列です。それが何であるか説明してください。 – MYGz

+0

詳細については、[Documentation](http://www.oracle-developer.net/display.php?id=506)を参照してください。クエリを作成しようとすると、問題がここに投稿された場​​合は、私たちはお手伝いします。 – Nitin

答えて

0

ようになり、あなたのテーブルを考える:

create table tab1 (col1 NUMBER(10), col2 DATE, col3 VARCHAR2(2), amt NUMBER(10), amt_r NUMBER(10)); 

次の種類の何かが役立つことがあります。

SELECT * FROM 
      (SELECT col1, col2, col3, 
        amt, 
        amt_r 
      FROM tab1) 
      PIVOT (MAX(NVL(amt, 0)) 
       FOR col3 IN ('A', 
          'B', 
          'C')); 

をまた、あなたの問題の詳細の多く欠けがあります。もっと詳しく教えてください。 インターネット上のピボット/ピボット解除についても読んでください。 https://www.techonthenet.com/oracle/pivot.php

0

出力でC_R列の値を計算する方法を指定していませんでした。単に値を表示する必要がある場合は、次のクエリを使用できます。

SELECT "No.","Date",NVL(A,0),NVL(A_R,0),NVL(B,0),NVL(B_R,0),NVL(C,0),NVL(C_R,0) 
FROM (
SELECT * 
FROM 
(SELECT "No.","Date","Type","Amount","Amount_R" 
FROM t) 
PIVOT (MAX("Amount"),MAX("Amount_R") as "R" FOR "Type" IN ('A' as A,'B' as B,'C' as C))); 
0
SELECT "No.", 
     "Date", 
     COALESCE(a, 0) AS a, 
     COALESCE(b, 0) AS b, 
     COALESCE(c, 0) AS c, 
     COALESCE(c * amount_r, 0) AS c_r 
FROM table_name 
PIVOT (SUM(amount) FOR Type IN ('A' AS A, 'B' AS B, 'C' AS C));