一位同事正尝试在具有自定义报告功能的 ERP 系统中生成报告;底层数据库是 Oracle 11g。这里的重要事实是,ERP 报告功能可能限制了我们可以为该报告采取的方法。这是我的同事的怀疑,但我对它的了解还不足以证实这一点。
问题:
我们有一个详细说明公司内部职位的表,我们将其称为 Roles
,另一个表存储在给定时间窗口内分配给每个角色的人员,我们将其称为 PersonRoles
.
对于给定的日期,我们想要返回具有特定角色的一个或多个人(可能有多个人同时担任同一角色)。
但是,有时角色会空缺一段时间;例如,如果 PersonA 从 1 月到 5 月担任该职位,而 PersonB 从 8 月到 12 月担任该职位,那么将有 2 个月的时间窗口,其中没有人在职位内。在这种情况下,当我们按这样的一天(6 月/7 月)查询时,我们希望返回一个标准结果(例如“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)
关于sql - 在没有匹配的 JOINed 记录时指定默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667039/