它看起来很简单,但是在Oracle 10gXE上对我不起作用。
基于my SQLFiddle,我必须显示所有职员名称,如果存在,则计数,如果未找到状态为2的记录,则显示0
如何在单个查询中实现它而不在应用程序端调用Loop。
最佳答案
SELECT S.NAME,ISTATUS.STATUS,COUNT(ISTATUS.Q_ID) as TOTAL
FROM STAFF S
LEFT OUTER JOIN QUESTION_STATUS ISTATUS
ON S.ID = ISTATUS.DONE_BY
AND ISTATUS.STATUS = 2 <--- instead of WHERE
GROUP BY S.NAME,ISTATUS.STATUS
通过在
WHERE
子句中进行过滤,您过滤得太晚了,并且删除了您想查看的STAFF
行。将过滤器移到联接条件意味着仅QUESTION_STATUS
行被过滤掉。请注意,这里
STATUS
并不是真正有用的列,因为除了2
或NULL
之外,您都不会得到任何结果,因此您可以忽略它:SELECT S.NAME,COUNT(ISTATUS.Q_ID) as TOTAL
FROM STAFF S
LEFT OUTER JOIN QUESTION_STATUS ISTATUS
ON S.ID = ISTATUS.DONE_BY
AND ISTATUS.STATUS = 2
GROUP BY S.NAME
关于sql - SQL:如果找不到记录,则返回0计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16656078/