我在数据库表的业务范围下定义了两个文件夹,名为EMP
和PROJECTS
EMP
表包含以下列
emp_number
emp_name
projects
表包含以下列
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中,当我尝试创建报告时,我能够看到 发起人员的姓名(initiate_by)
但是对于started_by和closed_by,我不知道如何显示启动和关闭项目的人员的姓名。
employee name of person who started (started_by)
employee name of person who started (closed_by)
感谢您对此的任何帮助
答案 0 :(得分:2)
为了实现以下目标
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表对象并为
创建连接projects.proj_initiated_by = emp1.emp_number
projects.proj_started_by = emp2.emp_number
projects.proj_closed_by = emp3.emp_number
答案 1 :(得分:1)
您可以使用2种变体:
加入每个人 - 所以3加入
在选择性部分
答案 2 :(得分:1)
我不熟悉您可能正在使用的特定报告工具,但我可以说编写SQL查询当然可以(或者,要报告 - 引擎为你写一个......),它包含对同一个表的多个引用(例如EMP
)。
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)
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)
请注意我如何使用别名(,
i
,s
)来消除歧义"对表p
的两个不同且无关的引用。 (以及两者都为emp
的{{1}}表。)我还使用projects
为结果指定了不同的列名。
另外:我选择在此使用JOINed
,而不是AS
。因此,此查询将仅返回同时具有启动器和启动器的项目。这是一个随意的选择,也许是一个不合适的选择。如果我选择使用INNER JOIN
,则会列出每个项目,但LEFT OUTER JOIN
和/或LEFT OUTER JOIN
可能是initiated_by_name
,结果集会更大。
如果此报告工具正在为您创建SQL查询,您会发现(可能在稍微深入了解用户的" advanced" 部分之后) - 手动)它将有一些创建像这样的查询的方法。 (包括各种类型的started_by_name
。)