[英]Oracle to MS-Access SQL:
我试图将SQL代码从Oracle复制到Access,以自动创建一些报告。 到目前为止,我已经成功了,但是我遇到了一个麻烦:
这是Oracle SQL:
SELECT DISTINCT o587265.PROJECT_NUMBER AS E587273,
o587265.PROJECT_NAME AS E587274,
o587265.PROJECT_STATUS_CODE AS E587275,
o587265.PROJECT_MANAGER AS E587276
FROM (
SELECT p.segment1 project_number,
p.NAME project_name,
p.project_status_code,
(
SELECT a.FULL_NAME
FROM apps.per_all_people_f a,
apps.pa_project_players_v pm
WHERE a.person_id = pm.person_id
AND pm.project_ID = p.project_ID
AND pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
AND a.person_type_id = 1
AND SYSDATE BETWEEN a.effective_start_date
AND a.effective_end_date
AND SYSDATE BETWEEN pm.start_date_active(+)
AND NVL(pm.end_date_active, SYSDATE)
) project_manager
FROM apps.pa_projects_all p
WHERE p.project_status_code != 'CLOSED'
AND p.template_flag = 'N'
AND p.org_ID = 5003
) o587265
ORDER BY o587265.PROJECT_NUMBER ASC,
o587265.PROJECT_NAME ASC,
o587265.PROJECT_MANAGER ASC;
这是我当前的MS-Access版本:
SELECT DISTINCT o587265.PROJECT_NUMBER AS E587273,
o587265.PROJECT_NAME AS E587274,
o587265.PROJECT_STATUS_CODE AS E587275,
o587265.PROJECT_MANAGER AS E587276
FROM (
SELECT p.segment1 AS project_number,
p.NAME AS project_name,
p.project_status_code,
(
SELECT a.FULL_NAME
FROM ((apps_per_all_people_f AS a INNER JOIN apps_pa_project_players_v AS pm ON a.person_id = pm.person_id
) INNER JOIN apps_pa_projects_all AS p ON pm.project_ID = p.project_ID
)
WHERE pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
AND a.person_type_id = 1
AND DATE () BETWEEN a.effective_start_date
AND a.effective_end_date
AND DATE () BETWEEN pm.start_date_active
AND IIf(IsNull(pm.end_date_active), DATE (), pm.end_date_active)
) AS PROJECT_MANAGER
FROM apps_pa_projects_all AS p
WHERE p.project_status_code <> 'CLOSED'
AND p.template_flag = 'N'
AND p.org_ID = 5003
) AS o587265
ORDER BY o587265.PROJECT_NUMBER ASC,
o587265.PROJECT_NAME ASC,
o587265.PROJECT_MANAGER ASC;
第一个直接在Oracle 11g(SQL Developer)上运行并可以运行。 MS-Access似乎在子查询中返回多个行。 我用尽了我的知识,但似乎无法复制它。
我究竟做错了什么?
另外,Oracle SQL代码中的这个(+)运算符是什么?
我将这个运算符称为OUTER(左/右)联接,但是我从未见过像那样使用它,而且绝对不是联接。
有人能帮我吗?
可能是在Oracle的MS Access显式INNER JOIN
的隐式INNER JOIN
的转换中,您在派生表的子查询的PROJECT_MANAGER列中引用了apps_pa_projects_all表,从而添加了一个附加的INNER JOIN
,从而代替了别名p 。 但是,此子查询与具有原始别名p的外部FROM
子句的派生表apps_pa_projects_all相关:
考虑删除第二个INNER JOIN
并返回相关的WHERE
子句条件:
原版的
...
(
SELECT a.FULL_NAME
FROM ((apps_per_all_people_f AS a
INNER JOIN apps_pa_project_players_v AS pm
ON a.person_id = pm.person_id)
INNER JOIN apps_pa_projects_all AS p
ON pm.project_ID = p.project_ID)
WHERE pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
...
更改
...
(
SELECT a.FULL_NAME
FROM apps_per_all_people_f AS a
INNER JOIN apps_pa_project_players_v AS pm
ON a.person_id = pm.person_id
WHERE pm.project_ID = p.project_ID
AND pm.ROLE = 'Project Manager'
AND a.current_employee_flag = 'Y'
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.