假设我在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
答案 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';