[英]Oracle SQL left outer join
我試圖進行兩個查詢,並將查詢2(q2)的結果加入查詢1(q1),其中兩個表上的usid都匹配。 我收到以下錯誤:
ORA-00904:“ Q2”。“ ENODEB_ID”:無效的標識符。
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
相關的select
列在此處:
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
在外部查詢中,選擇q2.enodeb_id
。
但是,在q2
的定義中,您僅選擇一個LISTAGG,並且沒有為其賦予別名。 您的意思是稱它為enodeb_id
嗎?
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.