2016-12-05 5 views
-1

Я совсем не знаком с PIVOT & UNPIVOT. Может ли кто-нибудь помочь мне сделать это транспонирование. Я такие данные:PIVOT & UNPIVOT в 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 

Мне нужны данные, как это:

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

Для получения дополнительной информации ознакомьтесь с этой [Документацией] (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')); 

Также есть много деталей в вашем вопросе отсутствует. Пожалуйста, уточните подробнее. Читайте также о Pivot/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));