ありがとう、私はこのフォーラムの寛大な人々から大きな助けを得ています。私はOracle SQLの初心者です。Oracle Select Query to on many、Inner Query、Not Group expressionを選択します。 JOINからの重複
PERSON_VIEWとPHONE_VIEWの2つのVIEWの間に1対多の関係があります。助けを借りて、私は電話のためのケース/時には、私はメインのクエリに戻ってそれを追加したときにクエリを持って、それはTASK_VIEWと私の他の参加に影響を与えた。
私はそれを内部クエリとして追加する必要があると考えて、結果を1つ戻しました。私は私の質問に以下を追加しました。 TOADで問合せを実行したところ、「ORA-00979:GROUP BY式ではありません」というエラーが表示され、問合せのすべてのPERSON_IDが強調表示されました。次の左結合を取ると、正常に実行され、電話番号が出力されません。どんな助けもありがとうございます。
私は3つの電話番号(セル、家庭、ビジネス)を回収しているので、TASKから帰ってきてもダブが発生することに気付きました。タスク内部結合では、 私は前に
のような結果を得る:後ToDo2
: 1ジョン・M. DoeのToDo1:ToDO1、ToDo1:ToDO1、 1ジョン・M. DoeのToDo1:ToDO1、ToDo2 ToDo1:ToDo1、ToDo2:ToDo2、ToDo2:ToDo2、ToDo2:ToDo2
私は3つのケースステートメントのうち最大値をとり、クエリを実行しました。しかし、それは私が修正することができますどのように
1ジョン・ドウ999-999-9999 1ジョン・ドウ888-888-8888 1ジョン・ドウ222-222-2222
のように各電話番号に対して個別の行を返しますこの?
LEFT JOIN (SELECT PERSON_ID, PHONE_TP_SHORT_DESC,
max(case when PHONE_TYPE = 'HOME' then PHONE_NUMBER end) as HOME_PHONE,
max(case when PHONE_TYPE = 'BUSINESS' then PHONE_NUMBER end) as BUSINESS_PHONE,
max(case when PHONE_TYPE = 'CELL' then PHONE_NUMBER end) as CELL_PHONE
FROM PHONE_VIEW) PHONE
ON PERSON.PERSON_ID = PHONE.PERSON_ID AND PHONE.PHONE_TYPE IN ('HOME','BUSINESS','CELL')
は、ここで私は、私はあなたのクエリの一つの問題を見ています
SELECT PERSON.PERSON_ID,
PERSON.FIRST_NAME,
PERSON.MIDDLE_NAME,
PERSON.LAST_NAME,
PERSON.USER_NAME,
PHONE.HOME_PHONE,
PHONE.BUSINESS_PHONE,
PHONE.CELL_PHONE,
LISTAGG(case
when SKILLS.SKILL_SHORT_DESC = 'ToDo1' then 'ToDo1:ToDo1'
when SKILLS.SKILL_SHORT_DESC = 'ToDo2' then 'ToDo2:ToDo2'
when SKILLS.SKILL_SHORT_DESC = 'ToDo3' then 'ToDo3:ToDo3'
when SKILLS.SKILL_SHORT_DESC = 'ToDo4' then 'ToDo4:ToDo4'
when SKILLS.SKILL_SHORT_DESC = 'ToDo5' then 'ToDo5:ToDo5'
when SKILLS.SKILL_SHORT_DESC = 'ToDo6' then 'ToDo6:ToDo6'
else ''
end, ',')
WITHIN GROUP (ORDER BY TASK.TASK_DESC) AS TASK
FROM PERSON_VIEW PERSON
LEFT JOIN (SELECT PERSON_ID, PHONE_TP_SHORT_DESC,
max(case when PHONE_TYPE = 'HOME' then PHONE_NUMBER end) as HOME_PHONE,
max(case when PHONE_TYPE = 'BUSINESS' then PHONE_NUMBER end) as BUSINESS_PHONE,
max(case when PHONE_TYPE = 'CELL' then PHONE_NUMBER end) as CELL_PHONE
FROM PHONE_VIEW) PHONE
ON PERSON.PERSON_ID = PHONE.PERSON_ID AND PHONE.PHONE_TYPE IN ('HOME','BUSINESS','CELL')
LEFT JOIN (SELECT DISTINCT PERSON_ID, TASK_DESC FROM TASK_VIEW) SKILLS
ON SKILLS.PERSON_ID = PERSON.PERSON_ID
GROUP BY
PERSON.PERSON_ID,
PERSON.FIRST_NAME,
PERSON.MIDDLE_NAME,
PERSON.LAST_NAME,
PERSON.USER_NAME,
PHONE.HOME_PHONE,
PHONE.BUSINESS_PHONE,
PHONE.CELL_PHONE
PHONE_TYPEがテーブルPHONE_VIEWで使用できない、またはあなたの推測だけで利用できない、または選択リストにないwhere節のカラムを使用できないと考えている合理的な背景があります。 – XING
エイリアス 'PHONE'はサブクエリAFAIKを参照します。そのサブクエリで選択された列のみが、サブクエリの外部で使用可能になります。 –
Ohhh ..私は彼がPHONE.PHONE_TYPEを使用したのを見ました....私は彼がPHONE_VIEW.PHONE_TYPEを使用したと思ったcozに尋ねました...私の間違い – XING