2016-09-26 12 views
0

私は2つのクエリを取り、クエリ2(q2)の結果を両方のテーブルで一致するクエリ1(q1)に結合しようとしています。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

q2に関するselect編コラムここにある:あなたがそこに列が名前の必要はありません

​​

ENODEB_ID、したがってエラーです。おそらく、listaggのエイリアスを意味するのでしょうか?

select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID) as ENODEB_ID 
関連する問題