【发布时间】:2018-07-29 16:17:25
【问题描述】:
我有以下两种情况和所需的输出。不确定是否可以使用 LISTAGG 或 PIVOT。
在编写 SQL 查询以实现所需输出的最佳方式方面需要帮助。
这是我到目前为止所尝试的。但是,我没有考虑过 AUTH。我正在寻找考虑 AUTH 的查询,如果添加更多列,应该是可扩展的。
SELECT CLM_TYPE_CSV,
LISTAGG (PROGRAM, ',') WITHIN GROUP (ORDER BY PROGRAM)
AS PROGRAM_CSV
FROM ( SELECT PROGRAM,
LISTAGG (CLAIM_TYPE, ',') WITHIN GROUP (ORDER BY CLAIM_TYPE)
AS CLM_TYPE_CSV
FROM STG_EDIT_DISP_PARAM
WHERE ERR_NUM = '001'
GROUP BY PROGRAM)
GROUP BY CLM_TYPE_CSV
感谢帮助! --####场景1############
---------------------------------------------------------
ERR_NUM | PROGRAM | CLAIM_TYPE | AUTH |
---------------------------------------------------------
001 | BLG | P | Y
001 | ENG | O | Y
001 | ENG | P | Y
001 | FED | O | Y
001 | FED | P | Y
001 | FED | Q | Y
期望的输出:
--------------------------------------------------------
ERR_NUM | PROGRAM | CLAIM_TYPE | AUTH |
--------------------------------------------------------
001 | BLG | P | Y
001 | ENG,FED | O,P | Y
001 | FED | Q | Y
--####场景2############--------------------------- --
---------------------------------------------------------
ERR_NUM | PROGRAM | CLAIM_TYPE | AUTH |
---------------------------------------------------------
001 | BLG | P | N
001 | ENG | O | Y
001 | ENG | P | N
001 | FED | O | Y
001 | FED | P | Y
001 | FED | Q | Y
001 | FED | X | N
期望的输出:
--------------------------------------------------------------------
ERR_NUM | PROGRAM | CLAIM_TYPE | AUTH |
------------------------------------------------------------------
001 | BLG,ENG | P | N
001 | ENG,FED | O | Y
001 | FED | P,Q | Y
001 | FED | X | N
【问题讨论】:
-
到目前为止您尝试过哪些查询?请您编辑您的问题并添加它们好吗?
标签: sql oracle oracle12c oracle11gr2 listagg