簡體   English   中英

Oracle SQL左外部聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM