我正在寻求将行转换为列的要求,例如每年的销售总额。这样的表可以按如下方式转置:
Sales Year
100 2,005
200 2,005
300 2,006
100 2,007
200 2,006
300 2,007
'2005' '2006' '2007'
300 500 400
我使用的查询是
SELECT * FROM test1 PIVOT (SUM("s") FOR "y" IN ( '2005', '2006', '2007' ) ) AS Temp_pivot
但是,如果出现新的一年,例如2008,我需要修改查询。
是否可以在不修改查询的情况下获得其他年份的输出。没有过程或动态SQL就能做到吗?
最佳问候 无效
答案 0 :(得分:0)
您似乎可以在IN
子句中使用子查询,那么类似这样的事情:
SELECT *
FROM test1 PIVOT (
SUM("s") FOR "y" IN (
SELECT year_of_calendar
FROM sys_calendar.calendar
WHERE year_of_calendar >= 2005
-- '2005', '2006', '2007'
)
) AS Temp_pivot
我还没有测试过,但是请尝试一下,让我知道。
答案 1 :(得分:0)
感谢您的投入。
馄饨,我尝试了子查询选项,但它说“选择失败。子查询返回了3669个以上的值”。
还有其他想法吗?
最佳问候 无效