我之前问过这个问题:
如何在两个日期之间的SQL中恢复整个日期范围,即使没有数据?
但我现在只需要选择状态为"E"的紧急事件.
我不能把WHERE status ='E',因为这将阻止它返回每个日期的条目.
我怎么解决这个问题?
只需将其添加到LEFT OUTER JOIN ... ON,因为就我理解的问题而言,这是连接行的一个转义.
像这样的东西:
WITH DateRange(date) AS (
SELECT @dateFrom dt
UNION ALL
SELECT DATEADD(dd, 1, date) date FROM DateRange WHERE date < @dateTo
)
SELECT DateRange.date, count(incident.id)
FROM DateRange
LEFT OUTER JOIN incident
ON incident.date >= DateRange.date
AND incident.date < DATEADD(dd, 1, DateRange.date)
AND incident.status = 'E'
GROUP BY DateRange.date
ORDER BY DateRange.date
Run Code Online (Sandbox Code Playgroud)