如何从当天未插入的 table 中获取值?

How to get a value from a table which is not inserted for the day?

假设我在 Oracle 中有一个 SQL table,每天存储代理商的佣金。因此,如果代理人 A 获得 25 的佣金,它会转到 table 并指定日期,但如果他那天没有得到任何东西,则什么都不会转到 table。现在假设我有四个代理人(A、B、C、D),我如何生成一个报告,其中显示代理人根据特定日期赚取的佣金,如果他那天没有赚到任何东西 'Absent'显示在他的名字旁边。

实际 table 看起来像这样:

SELECT Agent_name Comm Date
FROM AGENT_COMM_TAB 
WHERE TO_CHAR(DATE, 'DD-MM-YYYY') LIKE '15-04-2017';

Agent_name Comm Date
A          23   15-04-2017
C          20   15-04-2017
D          19   15-04-2017

报告应如下所示:

Agent Comm
A     23
B     Absent
C     20
D     19

让我假设您有 table 个特工。然后你可以使用 LEFT JOIN:

SELECT a.Agent_name, act.Comm, act.Date
FROM AGENTS a LEFT JOIN
     AGENT_COMM_TAB act
     ON a.? = act.?
WHERE act.DATE >= DATE '2017-04-15' AND
      act.DATE < DATE '2017-04-16';

如果Comm是一个字符串,那么你可以使用COALESCE()得到"absent":COALESCE(act.comm, 'absent')。但是,NULL 值应该足够了。

此外,我不知道正确的 JOIN 条件是什么。如果您没有 table 个代理,您可以在查询中生成 on:

SELECT a.Agent_name, act.Comm, act.Date
FROM (SELECT DISTINCT Agent_Name FROM AGENT_COMM_TAB) a LEFT JOIN
     AGENT_COMM_TAB act
     ON a.Agent_name = act.Agent_name
WHERE act.DATE >= DATE '2017-04-15' AND
      act.DATE < DATE '2017-04-16';