具有多个 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
;
我正在使用 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
;