2016-12-05 46 views
-1

我並不熟悉PIVOT & UNPIVOT。任何人都可以幫我做這個轉置。我有數據是這樣的:Oracle SQL中的PIVOT&UNPIVOT

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 

我需要的數據是這樣的:

No.  Date A B C C_R 
1234 15-Nov 0 0 10 100 
5678 15-Nov 0 5 0 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')); 

還有一些在你的問題很多細節丟失。請詳細說明。 閱讀關於互聯網上的樞軸/ Unpivot。 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));