【问题标题】:Oracle 10: pivot and unpivot without using pivot and unpivotOracle 10:不使用 pivot 和 unpivot 的 pivot 和 unpivot
【发布时间】:2016-02-21 13:05:12
【问题描述】:

我使用的是 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 月 2 日的 1,000,037 条记录和 2015 年 1 月 3 日的 999,967 条记录(这只是一个示例)。

编辑 #02:Oracle 数据库 10g 企业版版本 10.2.0.5.0 - 64bi

【问题讨论】:

  • 是否有或可能有超过这两个日期?还是只有两个?
  • 编辑:请假设表中只有两个不同日期的大块。

标签: oracle


【解决方案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;

【讨论】:

  • 非常感谢您的帮助。任何其他编辑将不胜感激。请记住,TABLE2 第一个日期有大约 1000 万条记录,第二个日期有 1000 万条记录。
  • @UltraCommit 如果你对表进行分区以获得有效的性能并且如果我们有索引会更好。
  • 表已经按 DATE1 分区 ;-) 我只查询两个分区日期 ;-)
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多