指定默认值,其中没有匹配的JOINed记录

时间:2012-03-12 12:30:27

标签: sql oracle join reporting

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

问题: 我们有一个表,详细介绍了公司,我们称之为中的位置Roles,而另一台存储谁是分配给每个角色给定的时间窗口,我们将称之为PersonRoles

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

但是,有时角色会在一段时间内空缺;例如,如果PersonA从1月到5月持有角色,而PersonB从8月到12月持有该角色,则会有2个月的窗口,其中没有人在帖子内。在这种情况下,当我们查询这样的一天(6月/ 7月)时,我们想要返回标准结果(比如'空置')。

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

2 个答案:

答案 0 :(得分:3)

在角色ID 上从RolesPersonRoles表的左外连接和日期。包含coalesce(PersonRoles.PersonIdentifier,'Vacant')项。

答案 1 :(得分:3)

在不知道报告工具的局限性的情况下,很难回答这个问题。但最简单的方法是进行外连接。

的内容
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)