【发布时间】: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查询不允许动态列数。
-
我不擅长写动态查询,请问你能帮我吗?