Oracle Discoverer - 单个 Table 上的多个连接

Oracle Discoverer - Multiple Join On Single Table

我在数据库 table 的业务区域下定义了两个文件夹,分别名为 EMPPROJECTS

EMP table 有以下列

emp_number
emp_name

projects table 有以下列

proj_id
proj_initiated_by
proj_started_by
proj_closed_by

连接生成为

emp.emp_number -> projects.proj_initiated_by (one_to_many)
emp.emp_number -> projects.proj_started_by (one_to_many)
emp.emp_number -> projects.proj_closed_by (one_to_many)

在 Discoverer Desktop 中,当我尝试创建报告时,我能够看到 发起人的员工姓名 (initiated_by)

但是对于 started_by 和 closed_by,我不确定如何显示启动和关闭项目的员工姓名。

employee name of person who started (started_by)    
employee name of person who started (closed_by)

感谢对此的任何帮助

您可以制作 2 种变体:
加入 emp 到每个人 - 所以 3 加入
在 select 五个部分

中创建一些功能或(select emp_name from emp where emp_number = ...)

我不熟悉您可能正在使用的 特定 报告工具,但我可以说编写 SQL 查询当然没问题 (或者,让报告引擎为您编写一个...),其中包含对同一 table(例如 EMP)的多个引用。 </p> <pre><code> SELECT i.emp_name AS initiated_by_name, s.emp_name AS started_by_name, p.project_d FROM projects p INNER JOIN emp i ON (i.emp_number = p.proj_initiated_by) INNER JOIN emp s ON (s.emp_number = p.proj_started_by)

请注意我是如何使用别名 (isp) 来 "disambiguate" 这两个不同且不相关的引用 table emp. (对于 projects table 两者都是 JOINed。)我还使用 AS 为结果赋予不同的列名。

另外: 我在这里选择使用 INNER JOIN,而不是 LEFT OUTER JOIN。因此,此查询将仅 return 个同时具有启动器和启动器的项目。这是一个武断的选择,也许是一个不合适的选择。如果我选择使用 LEFT OUTER JOIN,每个项目都会列出,但 initiated_by_name and/or started_by_name 可能是 NULL,并且结果集会更大。

如果此报告工具正在为您创建 SQL 查询,您会发现(可能在深入了解 "advanced" 用户手册的部分)它 有一些方法来创建这样的查询。 (包括各种类型JOINs。)

为了实现以下

emp.emp_number -> projects.proj_initiated_by (one_to_many)
emp.emp_number -> projects.proj_started_by (one_to_many)
emp.emp_number -> projects.proj_closed_by (one_to_many)

是创建emp的三个对象table和create join for

projects.proj_initiated_by = emp1.emp_number 
projects.proj_started_by = emp2.emp_number 
projects.proj_closed_by = emp3.emp_number