谢谢,我一直在这个论坛上从慷慨的人那里得到很大的帮助。我是Oracle SQL的初学者。Oracle选择查询到许多内部查询,获取不是组表达式。来自JOIN的重复
我在两个VIEW之间有一对多的关系,这两个VIEW是PERSON_VIEW和PHONE_VIEW。在帮助下,我得到了一个查询case/when for phone to work,但是当我将它添加回我的主查询时,它影响了我与TASK_VIEW的其他连接。
我想我需要添加它作为内部查询,所以我得到一个结果。我在查询中添加了以下内容。我在TOAD中运行了查询,它给了我一个错误,“ORA-00979:不是GROUP BY表达式”,并突出显示了查询中的所有PERSON_ID。如果我采取以下左连接,它运行良好,不会输出电话号码。任何帮助表示赞赏。
我也注意到,由于我带回了3个电话号码(小区,家庭和商业),它在我从任务中返回时导致了dups。与任务内部联接, 我得到的结果一样
之前: 约翰M.李四ToDo1:ToDO1,ToDo2:ToDo2
后: 约翰M.李四ToDo1:ToDO1,ToDo1:ToDO1, ToDo1:ToDo1,ToDo2:ToDo2,ToDo2:ToDo2,ToDo2:ToDo2
我从3个case语句中取出最大值,并运行查询。但它返回一个单独的行对于每个电话号码,像这样
约翰李四999-999-9999 约翰李四888-888-8888 约翰李四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 ..我的错误 – XING