Oracle SQL 左外连接

Oracle SQL left outer join

我正在尝试进行两个查询并将查询 2 (q2) 的结果连接到查询 1 (q1),其中 usid 在两个表上都匹配。 我收到以下错误:

ORA-00904: "Q2"."ENODEB_ID": invalid identifier.

SELECT 
  q1.Date_Range, q1.usid, q2.enodeb_id
FROM
(SELECT to_char(to_date(PERIODSTART,'DD/MM/YYYY'), 'MM-DD') || '-' || to_char(to_date(PERIODEND,'DD/MM/YYYY'), 'MM-DD') as Date_Range,
      usid FROM CQI_DASH.REGIONAL_LCQI_TOPOFFEND) q1
LEFT JOIN
(select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID)
FROM (
select usid,
       ENODEB_ID,
       row_number() over (partition by usid, ENODEB_ID order by usid) as rn
from AXIOM.NRS_LTE_ALU_CELLS
order by usid, ENODEB_ID)
WHERE rn = 1 
GROUP BY usid) q2
ON q1.usid = q2.usid;

LISTAGG(ENODEB_ID... 需要列名别名。这就是你想要的 ENODEB_ID 吗?

如果是,请尝试以下操作。此外,如果您正确地格式化 SQL,它更容易阅读和调试 :)

SELECT 
  q1.Date_Range, q1.usid, q2.enodeb_id
FROM ( 
    SELECT to_char(to_date(PERIODSTART,'DD/MM/YYYY'), 'MM-DD') || '-' || to_char(to_date(PERIODEND,'DD/MM/YYYY'), 'MM-DD') as Date_Range,
        usid
    FROM CQI_DASH.REGIONAL_LCQI_TOPOFFEND) q1
    LEFT JOIN ( 
        SELECT usid, 
        LISTAGG(ENODEB_ID, ',') 
        WITHIN GROUP ( ORDER BY ENODEB_ID ) AS ENODEB_ID
        FROM (
        SELECT usid,
           ENODEB_ID,
           row_number() over (partition by usid, ENODEB_ID order by usid) as rn
        FROM AXIOM.NRS_LTE_ALU_CELLS
        ORDER BY usid, ENODEB_ID
        )
WHERE rn = 1 
GROUP BY usid) q2
ON q1.usid = q2.usid;

q2 相关的 selected 专栏位于:

select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID)

您没有名为 ENODEB_ID 的列,因此出现错误。也许您打算为 listagg?

添加别名
select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID) as ENODEB_ID

在你的外部查询中你 select q2.enodeb_id.

但是,在 q2 的定义中,您只 select 一个 LISTAGG,并且您没有给它一个别名。你是想叫它 enodeb_id 吗?