sql - 在没有匹配的 JOINed 记录时指定默认值

标签 sql oracle join reporting

一位同事正尝试在具有自定义报告功能的 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/

相关文章:

java - Oracle 数据库 12c : How to also get the result index from a contains search

MySQL基于列连接两个表并排除另一列的值

php - 使用连接语句,但如果表为空

sql - 如何将 PostgreSQL 输出保存到文本文件

mysql - 压缩多个 OR 条件

SQL Server - 使用 IN 比较 Varchar 值

根据状态获取最新记录需要 SQL 吗?

sql - 如何有效地将不同的值计入SQL中的不同行?

java - 用户登录JDBC后屏蔽用户名

mysql - SQL 3 表连接