SQL加入参数问题

时间:2009-12-17 16:11:15

标签: sql-server

之前我问过这个问题:

How do I bring back an entire range of dates in SQL between two dates, even when there is no data?

但我现在只需要选择状态为“E”的紧急事件。

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

就像你在问题中所说的那样,将条件放在WHERE子句中会有效地将你的LEFT JOIN转换为INNER JOIN。

您应该将此添加到LEFT JOIN条件中,因为它意味着它是连接的条件。

类似于table1

LEFT JOIN table2 ON table1.field = table2.field AND table1.status='E'