2017-08-25 72 views
0

我有一個代碼,將所有的代表新客戶和他們的年份銷售。唯一的問題是,它只會吸引在invdate範圍內銷售的客戶,但如果他們沒有任何銷售額,我需要它顯示所有的賬戶爲0。有什麼辦法可以做到這一點?我嘗試使用COALESCE,它似乎沒有工作。我也嘗試使用左,右,全外連接。任何幫助,將不勝感激!如何顯示客戶,即使他們沒有銷售(結果)

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 

回答

0

你的問題是你在哪裏子句正在改變正確的連接到內部連接。把所有被別名混淆了的。進入ON子句。

+0

嗯,這似乎是有道理的。但是,把它們放入ON子句中究竟意味着什麼? – Vexxums

+0

查看@ JNevill的回答。 – HLGEM

2

您正在將結果限制在您的WHERE子句中AFTER您加入您的表會導致記錄丟失。相反,使用驅動查詢的accounts表切換到LEFT OUTER JOIN。然後在子句中限制您的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條款更容易。

相關問題