我有以下查询来返回客户使用的作业(访问)的数量以及他/她使用的不同的兽医.
SELECT
customer.users_id AS CustID,
COUNT(VisitID) AS Jobs,
COUNT(DISTINCT VetID) AS Resources
FROM customer
LEFT JOIN visit ON customer.users_id = visit.CustID
GROUP BY customer.users_id
Run Code Online (Sandbox Code Playgroud)
当我添加一个WHERE子句来计算只有未重新计划或已取消的访问时,我的查询看起来像这样.
SELECT
customer.users_id AS CustID,
COUNT(VisitID) AS Jobs,
COUNT(DISTINCT VetID) AS Resources
FROM customer LEFT JOIN visit ON customer.users_id = visit.CustID
WHERE visit.Status != 'Cancelled' AND visit.Status != 'ReScheduled'
GROUP BY customer.users_id
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我只会得到没有取消或重新安排访问的客户,虽然我正在为客户使用左连接.
我如何适应WHERE子句呢?
你不想要一个WHERE条款.这只是变成了LEFT JOIN一个INNER JOIN.你需要一个AND在LEFT JOIN:
SELECT customer.users_id AS CustID, COUNT(VisitID) AS Jobs, COUNT(DISTINCT VetID) AS Resources
FROM customer
LEFT JOIN visit ON customer.users_id = visit.CustID
AND visit.Status NOT IN('Cancelled','ReScheduled')
GROUP BY customer.users_id
Run Code Online (Sandbox Code Playgroud)