Sql 创建具有两个不同查询的视图,同一个表具有PIVOT,但有一个额外的不同列
我正在尝试合并生成两个数据透视的两个查询,即数据透视1和数据透视2(尝试合并两个数据透视) 我有两个不同的问题,比如1号问题和2号问题 问题1如下: 查询1输出(数据透视1): 问题2如下: 查询2输出(数据透视2): 是否有任何方法可以像下面那样附加两个输出Sql 创建具有两个不同查询的视图,同一个表具有PIVOT,但有一个额外的不同列,sql,merge,pivot,oracle-sqldeveloper,Sql,Merge,Pivot,Oracle Sqldeveloper,我正在尝试合并生成两个数据透视的两个查询,即数据透视1和数据透视2(尝试合并两个数据透视) 我有两个不同的问题,比如1号问题和2号问题 问题1如下: 查询1输出(数据透视1): 问题2如下: 查询2输出(数据透视2): 是否有任何方法可以像下面那样附加两个输出 COLUMN_A COLUMN_B CP1 CP2 CP3 Nothing here DATA1_IN_COLUMN_B 12 23 34 Nothing here
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.最简单的方法可能是
将所有查询联合起来
两个查询:
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;
谢谢你的及时回复。这帮了我一半的忙,你能帮我维持输出的秩序吗。
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;
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
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;