2016-09-26 275 views
0

我正在嘗試兩個查詢並加入查詢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; 
+0

發佈DDL和樣本數據,以便人們可以提供幫助。 – Sid

+0

Oracle區分大小寫。這可能與該弦在某處有很大的關係,而在其他地方則較低。 – durbnpoisn

回答

2

在您的外部查詢中,您選擇q2.enodeb_id

但是,在q2的定義中,您只能選擇一個LISTAGG,並且不會給它一個別名。你的意思是叫它enodeb_id

+0

是的,我做到了。我錯過了別名。 –

1

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; 
2

q2select編列在這裏:

​​

你沒有一列有一個名爲ENODEB_ID,從而出錯。也許你的意思是別名listagg

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