2016-12-05 3 views
-1

Ich bin überhaupt nicht vertraut mit PIVOT & UNPIVOT. Könnte mir jemand helfen, diese Umsetzung zu machen? Ich habe Daten wie folgt aus:PIVOT & UNPIVOT in Oracle SQL

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 

ich Daten wie diese brauchen:

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

Könnte jeder mir bitte helfen, die Abfrage zu machen.

+3

C_R ist eine neue Spalte. Erkläre, was es ist. – MYGz

+0

Schauen Sie sich diese [Dokumentation] (http://www.oracle-developer.net/display.php?id=506) für weitere Informationen an. Versuchen Sie eine Frage zu stellen, und wenn ein Problem auftritt, schreiben Sie es hier und wir helfen Ihnen gerne weiter. – Nitin

Antwort

0

Betrachtet man den Tisch sein wie:

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

Etwas von der folgenden Art helfen können:

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

Auch viele Details in Ihrer Frage gibt es fehlt. Bitte erläutern Sie mehr. Lesen Sie über Pivot/Unpivot im Internet auch. https://www.techonthenet.com/oracle/pivot.php

0

Sie haben nicht angegeben, wie der Wert für die C_R-Spalte in der Ausgabe berechnet wird. Wenn Sie einfach den anzuzeigenden Wert benötigen, können Sie die folgende Abfrage verwenden.

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));