繁体   English   中英

在没有匹配的JOINed记录的情况下指定默认值

[英]Specify default value where no matching JOINed record

一位同事正在尝试在具有自定义报告功能的ERP系统中生成报告。 基础数据库是Oracle 11g。 这里的一个重要事实是,ERP报告功能可能会限制我们可用于此报告的方法。 那是我的同事们的怀疑,但是我对此并不十分了解。

问题:我们有一张表,详细列出了公司内的职位,我们将其称为Roles ,另一张表存储了在给定时间段内分配给每个角色的人员,我们将其称为PersonRoles

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

但是,有时角色会空缺一段时间; 例如,如果PersonA担任1月-5月的角色,而PersonB担任8月-12月的角色,则将有2个月的窗口,没有人在该职位内。 在这种情况下,当我们在这样的一天(6月/ 7月)查询时,我们要返回标准结果(例如“空缺”)。

我不仅会想听到“最佳”方法,而且其他方法可能更适合于此报告工具的假定限制,因此也将受到欢迎。

Roles到角色ID 日期期间的PersonRoles表的左外部PersonRoles 包括coalesce(PersonRoles.PersonIdentifier,'Vacant')项。

不了解报告工具的局限性,显然很难回答这个问题。 不过,最简单的方法是进行外部联接。 遵循以下原则

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM