使用两个不同的查询和相同的 table 创建 VIEW 具有 PIVOT 但另外一个不同的列

Create VIEW with two different queries and same table having PIVOT but one additional different column

我正在尝试合并两个生成两个枢轴的查询,即 pivot1 和 pivot2(试图合并两个枢轴) 我有两个不同的查询,比如说 query1 和 query2。

Query1 is as follows:

select 
   COLUMN_B,
   NVL(COLUMN_IN_PIVOT1,0) AS COLUMN_IN_PIVOT1,
   NVL(COLUMN_IN_PIVOT2,0) AS COLUMN_IN_PIVOT2,
   NVL(COLUMN_IN_PIVOT3,0) AS COLUMN_IN_PIVOT3
FROM
   (
   SELECT COLUMN_B,COLUMN_C,COLUMN_D,
   FROM BASE_TABLE
   WHERE COLUMN_B IN ('DATA1_IN_COLUMN_B, DATA2_IN_COLUMN_B, DATA3_IN_COLUMN_B')
   )
pivot
   (
    sum(COLUMN_D)
    for(COLUMN_C)
    IN ('COLUMN_IN_PIVOT1' AS CP1,'COLUMN_IN_PIVOT2' AS CP2,'COLUMN_IN_PIVOT3' AS CP3)
   )
ORDER BY COLUMN_B;

Query1 OUTPUT(pivot1):

COLUMN_B            CP1 CP2 CP3
DATA1_IN_COLUMN_B   12  23  34
DATA2_IN_COLUMN_B   45  56  67
DATA3_IN_COLUMN_B   78  89  98

Query2 is as follows:

select 
   COLUMN_A,
   COLUMN_B,
   NVL(COLUMN_IN_PIVOT1,0) AS COLUMN_IN_PIVOT1,
   NVL(COLUMN_IN_PIVOT2,0) AS COLUMN_IN_PIVOT2,
   NVL(COLUMN_IN_PIVOT3,0) AS COLUMN_IN_PIVOT3
FROM
   (
   SELECT COLUMN_A,COLUMN_B,COLUMN_C,COLUMN_D,
   FROM BASE_TABLE
   WHERE 
     COLUMN_A IN ('DATA1_IN_COLUMN_A, DATA2_IN_COLUMN_A, DATA3_IN_COLUMN_A', DATA4_IN_COLUMN_A', 
                  DATA5_IN_COLUMN_A')
     COLUMN_B IN ('DATA1_IN_COLUMN_B, DATA2_IN_COLUMN_B, DATA3_IN_COLUMN_B') 
   )
pivot
   (
    sum(COLUMN_D)
    for(COLUMN_C)
    IN ('COLUMN_IN_PIVOT1' AS CP1,'COLUMN_IN_PIVOT2' AS CP2,'COLUMN_IN_PIVOT3' AS CP3)
   )
ORDER BY COLUMN_A;

Query2 OUTPUT(pivot2):

COLUMN_A            COLUMN_B            CP1 CP2 CP3
DATA1_IN_COLUMN_A   DATA1_IN_COLUMN_B   12  23  34
DATA2_IN_COLUMN_A   DATA2_IN_COLUMN_B   45  56  67
DATA3_IN_COLUMN_A   DATA2_IN_COLUMN_B   78  89  98
DATA4_IN_COLUMN_A   DATA3_IN_COLUMN_B   21  32  54

有什么方法可以像下面那样附加两个输出吗?

 COLUMN_A              COLUMN_B         CP1 CP2 CP3
Nothing here        DATA1_IN_COLUMN_B   12  23  34
Nothing here        DATA2_IN_COLUMN_B   45  56  67
Nothing here        DATA3_IN_COLUMN_B   78  89  98
DATA1_IN_COLUMN_A   DATA1_IN_COLUMN_B   12  23  34
DATA2_IN_COLUMN_A   DATA2_IN_COLUMN_B   45  56  67
DATA3_IN_COLUMN_A   DATA2_IN_COLUMN_B   78  89  98
DATA4_IN_COLUMN_A   DATA3_IN_COLUMN_B   21  32  54

如果不是,那么实现此输出的替代方法是什么,因为输出顺序不会受到影响。 TIA.

最简单的方法可能是union all两个查询:

SELECT *
FROM (
    SELECT 
        NULL AS COLUMN_A,
        COLUMN_B,
        NVL(COLUMN_IN_PIVOT1,0) AS COLUMN_IN_PIVOT1,
        NVL(COLUMN_IN_PIVOT2,0) AS COLUMN_IN_PIVOT2,
        NVL(COLUMN_IN_PIVOT3,0) AS COLUMN_IN_PIVOT3
    FROM (
        SELECT COLUMN_B,COLUMN_C,COLUMN_D,
        FROM BASE_TABLE
        WHERE COLUMN_B IN ('DATA1_IN_COLUMN_B', 'DATA2_IN_COLUMN_B', 'DATA3_IN_COLUMN_B')
    )
    PIVOT (
        SUM(COLUMN_D)
        FOR(COLUMN_C)
        IN ('COLUMN_IN_PIVOT1' AS CP1,'COLUMN_IN_PIVOT2' AS CP2,'COLUMN_IN_PIVOT3' AS CP3)
    )
    UNION ALL
    SELECT 
        COLUMN_A,
        COLUMN_B,
        NVL(COLUMN_IN_PIVOT1,0) AS COLUMN_IN_PIVOT1,
        NVL(COLUMN_IN_PIVOT2,0) AS COLUMN_IN_PIVOT2,
        NVL(COLUMN_IN_PIVOT3,0) AS COLUMN_IN_PIVOT3
    FROM (
        SELECT COLUMN_A,COLUMN_B,COLUMN_C,COLUMN_D,
        FROM BASE_TABLE
        WHERE 
            COLUMN_A IN ('DATA1_IN_COLUMN_A', 'DATA2_IN_COLUMN_A', 'DATA3_IN_COLUMN_A', 'DATA4_IN_COLUMN_A', 'DATA5_IN_COLUMN_A')
            AND COLUMN_B IN ('DATA1_IN_COLUMN_B', 'DATA2_IN_COLUMN_B', 'DATA3_IN_COLUMN_B') 
    )
    PIVOT (
        sum(COLUMN_D)
        for(COLUMN_C)
        IN ('COLUMN_IN_PIVOT1' AS CP1,'COLUMN_IN_PIVOT2' AS CP2,'COLUMN_IN_PIVOT3' AS CP3)
    )
) x
ORDER BY COLUMN_A NULLS FIRST, COLUMN_B;