它看起来很简单,但是在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并不是真正有用的列,因为除了2NULL之外,您都不会得到任何结果,因此您可以忽略它:

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/

10-13 02:55