ORACLE:动态数据的 PIVOT 表
Posted
技术标签:
【中文标题】ORACLE:动态数据的 PIVOT 表【英文标题】:ORACLE: PIVOT table for Dynamic data 【发布时间】:2020-05-28 03:21:38 【问题描述】:我有一张桌子 select * from xx_test
我需要一个查询来获得如下输出
我尝试了以下查询
SELECT
PROJECT,
TASK,
PROJ_NAME,
MAX(CASE WHEN PERIOD = 'DEC-16' THEN cost END) AS DEC_16,
MAX(CASE WHEN PERIOD = 'JAN-17' THEN cost END) AS JAN_17
FROM xx_test
GROUP BY PROJECT,
TASK,
PROJ_NAME
它似乎给出了所需的输出,但不幸的是,表格数据将根据我的报告参数中给出的时间段进行填充(即,DEC-16、JAN-17 不会一直相同)。
还有其他方法可以实现吗?
【问题讨论】:
你会一直传递两个参数吗?或者可以更多?我只是想知道您想要进入所需结果的列数将始终为 5? @Tejash 期间是报告中的 from/to 参数。如果我通过 Dec-16(as from) 和 Mar-17(as To) 参数,则 period 列将具有 DEC-16、JAN-17、FEB-17 和 Mar-17。所以答案是否定的,我不会在结果中总是有 5 列。列数将是动态的,取决于 PERIOD FROM/PERIOD TO 值。 那么你必须使用动态查询,因为oracle SQL查询不允许动态列数。 我不擅长写动态查询,请问你能帮我吗? 【参考方案1】:我们在数据库中没有原生的动态枢轴,但是来自 AMIS 的 Anton 使用 PLSQL 实用程序提供了它。
https://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
【讨论】:
以上是关于ORACLE:动态数据的 PIVOT 表的主要内容,如果未能解决你的问题,请参考以下文章