具有多个 table 联接的 Oracle LISTAGG

Oracle LISTAGG with multiple table joins

我正在使用 Oracle 18.c 我有一个查询,我在其中加入了三个表。效果很好。

select ae."PRIM_KEY", 
ae."EVENT_DATE",
ae."EVENT_NAME",
ac."FIRST_NAME" || ' ' || ac."LAST_NAME" "PRESENTER"
from    "AFF_EVENT_V" ae
      , "AFF_CONTACT" ac
      , "AFF_EVENT_PRESENTER" aep
where   aep."EVENT_FKEY" = ae."PRIM_KEY"
and     aep."CONTACT_FKEY" = ac."PRIM_KEY"
Order by event_date desc
;

查询产生如下结果:

PRIM_KEY EVENT_DATE EVENT_NAME PRESENTER
641 26-APR-21 Event 99 George Washington
622 19-APR-21 Event 98 John Adams
541 25-JAN-21 Event 97 Thomas Jefferson
541 25-JAN-21 Event 97 James Madison
521 18-JAN-21 Event 96 James Monroe

在许多情况下,一个给定的事件有多个演示者。就像 541 的 Prim_Key。我想将给定事件的演示者分组在一起,以便结果如下所示:

PRIM_KEY EVENT_DATE EVENT_NAME PRESENTER
641 26-APR-21 Event 99 George Washington
622 19-APR-21 Event 98 John Adams
541 25-JAN-21 Event 97 Thomas Jefferson, James Madison
521 18-JAN-21 Event 96 James Monroe

我尝试使用 LISTAGG 函数,但似乎无法正确使用。这是我试过的。

select ae."PRIM_KEY", 
ae."EVENT_DATE",
ae."EVENT_NAME",
LISTAGG(ac."FIRST_NAME" || ' ' || ac."LAST_NAME", ',') WITHIN GROUP (ORDER BY ac."LAST_NAME") as "PRESENTER"
from    "AFF_EVENT_V" ae
      , "AFF_CONTACT" ac
      , "AFF_EVENT_PRESENTER" aep
where   aep."EVENT_FKEY" = ae."PRIM_KEY"
and     aep."CONTACT_FKEY" = ac."PRIM_KEY"
Order by event_date desc
;

这会产生错误:ORA-00937: 不是单组函数。 连接多个表时如何使用 LISTAGG?

您必须添加一个 GROUP BY 子句

select ae."PRIM_KEY", 
ae."EVENT_DATE",
ae."EVENT_NAME",
LISTAGG(ac."FIRST_NAME" || ' ' || ac."LAST_NAME", ',') WITHIN GROUP (ORDER BY ac."LAST_NAME") as "PRESENTER"
from    "AFF_EVENT_V" ae
      , "AFF_CONTACT" ac
      , "AFF_EVENT_PRESENTER" aep
where   aep."EVENT_FKEY" = ae."PRIM_KEY"
and     aep."CONTACT_FKEY" = ac."PRIM_KEY"
Group BY 
ae."PRIM_KEY", 
ae."EVENT_DATE",
ae."EVENT_NAME"
Order by event_date desc
;