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

时间:2017-04-15 13:12:53

标签: sql oracle report

假设我在Oracle中有一个SQL表,每天都会存储代理的佣金。因此,如果代理商A的佣金为25,那么它会带着日期进入表格,但如果他当天没有得到任何东西,那么表格就没有了。现在假设我有四个代理人(A,B,C,D),我如何生成一份报告,其中代理人获得的佣金是根据具体日期显示的,如果他当天没有赚取任何费用,那么#39 ;缺席'显示在他的名字旁边。

实际表格如下:

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

1 个答案:

答案 0 :(得分:0)

我假设你有一张代理人表。然后,您可以使用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字符串,那么您就可以“#34;不存在&#34;使用COALESCE()COALESCE(act.comm, 'absent')。但是,NULL值应该足够了。

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

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';