【发布时间】:2020-11-17 07:36:17
【问题描述】:
我有一个需要对数据进行透视的要求。 然而,枢轴需要是动态的,因为列标题会根据列 app_id 不断变化。 所以如果 app_id=1。列标题将为 A、B、C、D,如果 app_id=2,列将为 CDEF 等等。 此外,每组值都有一个 id。因此对于 id、120 和 app_id=1 ,A、B、C、D 列将显示值等等。
当前示例数据只有 2 个 app_id,但可能还有更多,所以 app_id 和标签会不断变化,因此我需要编写一个动态查询。
示例表数据:
ID label value app_id
--- ----- ----- ------
120 A Alpha 1
120 B Beta 1
120 C Class 1
120 D Delta 1
120 C Alpha 2
120 D Beta 2
120 E Class 2
120 F Delta 2
建设性的查询是
WITH data( ID, label, value, app_id ) AS
(
SELECT 120, 'A', 'Alpha', 1 FROM dual UNION ALL
SELECT 120, 'B', 'Beta' , 1 FROM dual UNION ALL
SELECT 120, 'C', 'Class', 1 FROM dual UNION ALL
SELECT 120, 'D', 'Delta', 1 FROM dual UNION ALL
SELECT 120, 'C', 'Alpha', 2 FROM dual UNION ALL
SELECT 120, 'D', 'Beta' , 2 FROM dual UNION ALL
SELECT 120, 'E', 'Class', 2 FROM dual UNION ALL
SELECT 120, 'F', 'Delta', 2 FROM dual
)
SELECT *
FROM data
预期输出:
SELECT * FROM data WHERE ID = 120 AND app_id = 1;
app_id A B C D ID
------ ------ ----- ----- ----- -----
1 Alpha Beta Class Delta 120
SELECT * FROM data WHERE ID = 120 AND app_id = 2;
app_id C D E F ID
------ ------ ----- ----- ----- -----
2 Alpha Beta Class Delta 120
【问题讨论】: