如何从当天未插入的 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';
假设我在 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';