【发布时间】:2019-10-21 20:50:34
【问题描述】:
我有一个日期从 2000 年到 2029 年的日历表。我在 date=tdate 对我的数据表进行了完全外部联接。我的目标是按日期计算行程,如果没有行程则显示零。但是,所有日期都没有显示。如果数据表中没有行程日期,则日历表中的日期根本不会显示。我以前从未见过这种情况。我尝试将其更改为也不起作用的左外连接。实际查询如下。
SELECT DISTINCT c.DATE,
COALESCE(COUNT(t.TripID), 0) AS tripCount
FROM dbo.Calendar c
FULL OUTER JOIN dbo.TripsMade t ON c.DATE = CONVERT(DATE, t.tripdate, 126)
WHERE (c.DATE BETWEEN '2019-09-01' AND '2019-09-30' )
AND (t.compid = 270 OR t.compid IS NULL)
GROUP BY c.DATE
ORDER BY c.DATE
如果我从日历表中选择所有日期,它们都在那里。数据表中缺少日期,并且总是会丢失一些日期。我需要所有日期都显示在此报告中,如果数据表端没有相关记录,则显示零。
我在这里错过了什么?
目标
日期 TOTAL_TRIPS
2019-09-01 3
2019-09-02 5
2019-09-03 0
2019-09-04 4
2019-09-05 0
2019-09-06 9
【问题讨论】:
-
您的
WHERE将其转换为隐式INNER JOIN,因为未处理c.Date的NULL值。t.compid=270也应该在ON中,然后你可以删除t.compid IS NULL
标签: sql sql-server-2012