【问题标题】:ORACLE: PIVOT table for Dynamic dataORACLE:动态数据的 PIVOT 表
【发布时间】: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查询不允许动态列数。
  • 我不擅长写动态查询,请问你能帮我吗?

标签: sql oracle pivot


【解决方案1】:

我们在数据库中没有原生的动态枢轴,但是来自 AMIS 的 Anton 使用 PLSQL 实用程序提供了它。

https://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多