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
相关的 select
ed 专栏位于:
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
吗?
我正在尝试进行两个查询并将查询 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
相关的 select
ed 专栏位于:
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
吗?