Sql 如何显示客户,即使他们没有销售(结果)
我有一个代码,可以吸引所有销售代表的新客户和他们今年迄今的销售。唯一的问题是它只会吸引销售在invdate范围内的客户,但如果他们没有任何销售,我需要它显示所有带有0的帐户。有没有办法做到这一点?我试着使用COALESCE,但似乎不起作用。我还尝试使用左、右、全外连接。任何帮助都将不胜感激Sql 如何显示客户,即使他们没有销售(结果),sql,Sql,我有一个代码,可以吸引所有销售代表的新客户和他们今年迄今的销售。唯一的问题是它只会吸引销售在invdate范围内的客户,但如果他们没有任何销售,我需要它显示所有带有0的帐户。有没有办法做到这一点?我试着使用COALESCE,但似乎不起作用。我还尝试使用左、右、全外连接。任何帮助都将不胜感激 select a.Acctnum, sum(a.invtotal) as total from invoices a right join accounts b on a.acctnum = b.ac
select
a.Acctnum,
sum(a.invtotal) as total
from invoices a right join accounts b on a.acctnum = b.acctnum where
a.invdate between '1/1/2017' and '12/31/2017'
and a.sls = '78'
and b.sls = '78'
and b.activetype = 'y' and b.startdate > (getdate()-365)
group by a.acctnum
order by total desc
您的问题在于子句正在将右连接更改为内部连接。将所有别名为a的。进入ON子句。您的问题在于子句将右连接更改为内部连接。将所有别名为a的。进入ON子句。在加入表后,将结果限制在WHERE子句中,从而导致记录丢失。相反,切换到
左外部联接
,使用帐户
表驱动查询。然后在ON
子句中限制invoices
表,以便在加入之前删除invoices
SELECT a.Acctnum,
sum(a.invtotal) AS total
FROM accounts b
LEFT OUTER JOIN invoices a ON
a.accntnum = b.acctnum AND
--Put the restrictions on your left most table here
--so they are removed BEFORE joining.
a.invdate BETWEEN '1/1/2017' AND '12/31/2017'
AND a.sls = '78'
WHERE
b.sls = '78'
AND b.activetype = 'y'
AND b.startdate > (getdate() - 365)
GROUP BY a.acctnum
ORDER BY total DESC
这有点像在作为左表加入之前在
invoices
中执行子查询。把条件放到ON
子句中更容易 加入表后,您在WHERE子句中限制了结果,导致记录丢失。相反,切换到左外部联接
,使用帐户
表驱动查询。然后在ON
子句中限制invoices
表,以便在加入之前删除invoices
SELECT a.Acctnum,
sum(a.invtotal) AS total
FROM accounts b
LEFT OUTER JOIN invoices a ON
a.accntnum = b.acctnum AND
--Put the restrictions on your left most table here
--so they are removed BEFORE joining.
a.invdate BETWEEN '1/1/2017' AND '12/31/2017'
AND a.sls = '78'
WHERE
b.sls = '78'
AND b.activetype = 'y'
AND b.startdate > (getdate() - 365)
GROUP BY a.acctnum
ORDER BY total DESC
这有点像在作为左表加入之前在
invoices
中执行子查询。把条件放到ON
子句中更容易 嗯,这似乎有道理。但是你把它们放在ON子句中到底是什么意思呢?看@JNevill的答案。嗯,这似乎有道理。但是你把它们放在ON子句中到底是什么意思呢?参见@JNevill的答案。