0

障碍:我无法创造任何东西。没有 GTT、PROC 等。我正在查询 Exadata 数据湖,我创建的任何脚本都将从 Toad 或 SQL Developer 执行。

我有一个返回 3 行的 SELECT 查询:

  • 日期
  • IDKey
  • 事件

对于每个 Date、IDKey,可能有十几个 EVENT。例子:

 DATE       IDKEY EVENT    
10/17/2016  300328  EVENT1    
10/17/2016  300328  EVENT3    
10/17/2016  300328  EVENT4    
10/17/2016  300440  EVENT1    
10/17/2016  300440  EVENT2    
10/17/2016  300440  EVENT5 

在给定的 DATE,一个 IDKey 可以有多个 EVENTS,每个都生成一个新行。

目标:创建一个组合 DATE 和 IDKEY 的单行,将所有唯一的 EVENTS 连接到一个字段中;

DATE  IDKEY  EVENT    
10/17/2016 300328 'EVENT1 | EVENT3 | EVENT4'    
10/17/2016 300440 'EVENT1 | EVENT2 | EVENT5'
4

2 回答 2

1

看起来像group by一个listagg

with demo (dt, id, event) as
   ( select date '2016-10-17', 300328, 'EVENT1' from dual union all
     select date '2016-10-17', 300328, 'EVENT3' from dual union all
     select date '2016-10-17', 300328, 'EVENT4' from dual union all
     select date '2016-10-17', 300440, 'EVENT1' from dual union all
     select date '2016-10-17', 300440, 'EVENT2' from dual union all
     select date '2016-10-17', 300440, 'EVENT5' from dual 
   )
select dt, id
     , listagg(event, '|') within group (order by event) as events
from   demo
group by dt, id;

DT                  ID EVENTS
----------- ---------- --------------------------------
17/10/2016      300328 EVENT1|EVENT3|EVENT4
17/10/2016      300440 EVENT1|EVENT2|EVENT5

如果有大量的事件,他可能会出现问题。

于 2017-05-22T23:21:28.810 回答
1

您可以使用“listagg”功能。查看http://docs.oracle.com/database/122/SQLRF/LISTAGG.htm#SQLRF30030以进一步阅读

select date, id, listagg(event,'|') within group(order by date,id) 
from my_table 
group by date,id
于 2017-05-22T23:21:44.937 回答