Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 指定默认值,其中没有匹配的联接记录_Sql_Oracle_Join_Reporting - Fatal编程技术网

Sql 指定默认值,其中没有匹配的联接记录

Sql 指定默认值,其中没有匹配的联接记录,sql,oracle,join,reporting,Sql,Oracle,Join,Reporting,一位同事试图在具有自定义报告功能的ERP系统中生成报告;底层数据库是Oracle 11g。这里的一个重要事实是,ERP报告功能可能会限制我们对此报告可以采取的方法。这是我的同事们的怀疑,但我对它了解不够,无法证实这一点 问题: 我们有一个表格详细说明公司内的职位,我们称之为角色,另一个表格存储在给定时间窗口内分配给每个角色的人员,我们称之为人员角色 对于给定的日期,我们希望返回具有特定角色的一个人或多个人(可能有多个人同时执行相同的角色) 然而,有时角色会空缺一段时间;例如,如果PersonA从

一位同事试图在具有自定义报告功能的ERP系统中生成报告;底层数据库是Oracle 11g。这里的一个重要事实是,ERP报告功能可能会限制我们对此报告可以采取的方法。这是我的同事们的怀疑,但我对它了解不够,无法证实这一点

问题: 我们有一个表格详细说明公司内的职位,我们称之为
角色
,另一个表格存储在给定时间窗口内分配给每个角色的人员,我们称之为
人员角色

对于给定的日期,我们希望返回具有特定角色的一个人或多个人(可能有多个人同时执行相同的角色)

然而,有时角色会空缺一段时间;例如,如果PersonA从1月到5月担任该角色,PersonB从8月到12月担任该角色,那么将有一个2个月的窗口,其中没有人在post中。在这种情况下,当我们在这样一天(六月/七月)进行查询时,我们希望返回一个标准结果(比如“空缺”)


我不仅有兴趣听到“最佳”方法,而且其他方法可能更适合此报告工具的假定限制,因此我也欢迎它们。

在角色ID和日期周期上,从
角色
PersonRoles
表中留下外部连接。包括一个
合并(PersonRoles.PersonIdentifier,'Spank')
项。

如果不知道报告工具的限制,显然很难回答这个问题。不过,最简单的方法是进行外部联接。类似于

SELECT r.role_name,
       nvl( pr.person_name, 'Vacant' )
  FROM roles r
       LEFT OUTER JOIN personRoles pr  
         ON(    r.role_id = pr.rold_id
            AND <<some date parameter>> BETWEEN pr.start_date AND pr.end_date)
选择r.role\u名称,
nvl(公关人员姓名“空缺”)
来自角色r
左外连接personRoles pr
ON(r.role\u id=pr.rold\u id
在pr.start_日期和pr.end_日期之间)

我意识到缺乏报告工具的知识是一个障碍,我甚至不能说感知到的约束是真实的还是想象的。因此,一系列的解决方案是受欢迎的。我忘记了这个Qn——我把这个建议传给了我的同事,也忘了它。我不再在那里工作(碰巧他也不在),所以我不知道最终的解决方案是什么;所以我选择了两个答案中最“完整”的一个。