我正在使用Oracle 10,因此我无法使用PIVOT和UNPIVOT。我的问题如下。请假设你有这个Oracle表:
我想编写一个Oracle查询,在不使用PIVOT / UNPIVOT的情况下生成以下输出:
在源表中,您可以看到我有两个主要数据块:与2015年2月相关的日期,以及与2015年3月相关的日期。
(KEY1,KEY2)=(11111,A)出现在2015年2月,而2015年3月缺席。
(KEY1,KEY2)=(55555,E)2015年2月缺席,并于2015年3月出现。
请帮我编写查询以产生所需的输出。
非常感谢您考虑我的要求。
编辑#01:请假设表中只有两个具有两个不同日期的大块。例如,2015年1月1日的1,000,037条记录和2015年1月1日的999,967条记录(仅作为示例)。
编辑#02:Oracle数据库10g企业版10.2.0.5.0版 - 64bi
答案 0 :(得分:1)
我希望下面会有效。
SELECT key1,
key2,
MAX ("01/02/2015") AS "01/02/2015",
MAX ("01/03/2015") AS "01/03/2015"
FROM (SELECT a.KEY1,
a.KEY2,
CASE
WHEN A.DATE1 = TO_DATE ('01/02/2015', 'DD/MM/YYYY')
THEN
a.VALUE
END
AS "01/02/2015",
CASE
WHEN a.DATE1 = TO_DATE ('01/03/2015', 'DD/MM/YYYY')
THEN
a.VALUE
END
AS "01/03/2015"
FROM TABLE2 a)
GROUP BY key1, key2
ORDER BY key1;
修改强>
而不是编写嵌套选择你也可以在单个查询中执行
SELECT a.KEY1,
a.KEY2,
MAX (
CASE
WHEN A.DATE1 = TO_DATE ('01/02/2015', 'DD/MM/YYYY') THEN a.VALUE
END)
AS "01/02/2015",
MAX (
CASE
WHEN a.DATE1 = TO_DATE ('01/03/2015', 'DD/MM/YYYY') THEN a.VALUE
END)
AS "01/03/2015"
FROM TABLE2 a
GROUP BY key1, key2
ORDER BY key1;