使用两个不同的查询和相同的 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;
我正在尝试合并两个生成两个枢轴的查询,即 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;