SQL加入参数问题

Nib*_*Pig 0 sql-server

我之前问过这个问题:

如何在两个日期之间的SQL中恢复整个日期范围,即使没有数据?

但我现在只需要选择状态为"E"的紧急事件.

我不能把WHERE status ='E',因为这将阻止它返回每个日期的条目.

我怎么解决这个问题?

Luc*_*ero 5

只需将其添加到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)