Oracle SQL左外部连接
问题描述:
我正在尝试两个查询并加入查询2(q2)的查询1(q1),这两个表上的usid匹配。 我收到以下错误:Oracle SQL左外部连接
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;
答
在您的外部查询中,您选择q2.enodeb_id
。
但是,在q2
的定义中,您只能选择一个LISTAGG,并且不会给它一个别名。你的意思是叫它enodeb_id
?
+0
是的,我做到了。我错过了别名。 –
答
的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
的select
编列在这里:
你没有一列有一个名为ENODEB_ID
,从而出错。也许你的意思是别名listagg
?
select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID) as ENODEB_ID
发布DDL和样本数据,以便人们可以提供帮助。 – Sid
Oracle区分大小写。这可能与该弦在某处有很大的关系,而在其他地方则较低。 – durbnpoisn