我想知道是否有人可以根据日期的选择参数来帮助修改我创建的查询数据的SQL查询。我面临的问题是,由于相同合同号的拟合表中的多个结果,我在结果集中显示重复的合同号。是否可以只将结果过滤到一个联系号码?
这是我的问题:
select co.contractdate condate, ff.date_ fitdate, co.contractno conno, cu.surname Surname
from contract co
full outer join co_fitt ff on co.contractno = ff.contractno
full outer join customer cu on co.custref = cu.custref
WHERE co.contractdate between '01/jan/2016' and '31/jan/2016'
order by co.contractno
答案 0 :(得分:0)
试试这个
SELECT co.contractdate condate,
ff.date_ fitdate,
co.contractno conno,
cu.surname Surname
FROM contract co
FULL OUTER JOIN (SELECT DISTINCT contractno
FROM co_fitt) ff
ON co.contractno = ff.contractno
AND co.contractdate BETWEEN '01/jan/2016' AND '31/jan/2016'
FULL OUTER JOIN customer cu
ON co.custref = cu.custref
ORDER BY co.contractno
而不是
co.contractno as conno
使用
COALESCE(co.contractno,ff.contractno) as conno
会更有意义
同时将contractdate
过滤条件移至ON
条件,否则FULL OUTER JOIN
将隐式转换为INNER JOIN
。来自contract
表的不匹配记录在NULL
列中将包含contractdate
值,当您过滤contractdate
子句中的Where