Oracle 查询 -ListAgg

Posted

技术标签:

【中文标题】Oracle 查询 -ListAgg【英文标题】:Oracle query -ListAgg 【发布时间】:2019-04-07 16:19:19 【问题描述】:

我需要在 Oracle 中为以下情况编写查询(实际上这是一个示例表) This is DB Table structure

如果表中包含选定 Item_id 的两组日期,则根据类型,一个将创建日期,另一个是交易日期。 (此处类型 1 - 创建日期和类型 2 是交易日期)

我的最终结果如下: Output

请任何人帮助我在 oracle 中为这种情况编写查询(我是 oracle 的新手。据我所知,我们应该使用“ListAgg”来实现此输出。)

提前致谢

【问题讨论】:

你知道错了。我只查看了所需的输出,但其中没有任何看起来像 listagg 的内容。 【参考方案1】:

据我所知,listagg;普通的聚合就可以完成这项工作。

SQL> alter session set nls_date_format = 'dd/mm/yyyy';

Session altered.

SQL> with test (cat_id, type, cdate, item_id) as
  2    (select 1, 1, date '2019-04-09', 46 from dual union all
  3     select 2, 1, date '2019-03-05', 47 from dual union all
  4     select 3, 2, date '2019-04-10', 46 from dual union all
  5     select 4, 2, date '2019-04-06', 52 from dual
  6    )
  7  select item_id,
  8    min(case when type = 1 then cdate end) created_date,
  9    max(case when type = 2 then cdate end) transaction_date
 10  from test
 11  group by item_id
 12  order by item_id;

   ITEM_ID CREATED_DA TRANSACTIO
---------- ---------- ----------
        46 09/04/2019 10/04/2019
        47 05/03/2019
        52            06/04/2019

SQL>

【讨论】:

以上是关于Oracle 查询 -ListAgg的主要内容,如果未能解决你的问题,请参考以下文章

oracle查询结果格式问题

如何提高oracle模糊查询的性能?

Oracle如何查询表空间?

oracle 查询最大的五位数

oracle怎样查询哪些表分区?

oracle SQL查询语句