我尝试过IsNull,Case语句并在线搜索,但由于某种原因,如果没有找到记录,它仍然没有显示记录或用'0'替换它我试图从中获取所有类型表格并显示在日期范围内完成的数量。
到目前为止,这是我的代码。
SELECT ISNULL(COUNT(Type), 0) AS Total, Type
FROM dbo.Refs
WHERE (DateSubmitted BETWEEN CONVERT(DATETIME, '2014-02-01 00:00:00', 102) AND CONVERT(DATETIME, '2015-01-01 00:00:00', 102))
GROUP BY Type
Type列是一个不幸的varchar
由于
答案 0 :(得分:2)
如果您有一个存储您的类型的表,您可以使用:
SELECT COUNT(r.Type) AS Total, t.Type
FROM TypeTable t
LEFT JOIN dbo.Refs r
ON r.Type = t.Type
AND r.DateSubmitted >= CONVERT(DATETIME, '2014-02-01 00:00:00', 102)
AND r.DateSubmitted <= CONVERT(DATETIME, '2015-01-01 00:00:00', 102)
GROUP BY t.Type;
否则,在加入按日期过滤的表格之前,您需要使用现有表格获取所有类型的列表:
SELECT COUNT(r.Type) AS Total, t.Type
FROM (SELECT DISTINCT Type FROM dbo.Refs) t
LEFT JOIN dbo.Refs r
ON r.Type = t.Type
AND r.DateSubmitted >= CONVERT(DATETIME, '2014-02-01 00:00:00', 102)
AND r.DateSubmitted <= CONVERT(DATETIME, '2015-01-01 00:00:00', 102)
GROUP BY t.Type;
或者你可以使用:
SELECT COUNT(CASE WHEN r.DateSubmitted >= CONVERT(DATETIME, '2014-02-01 00:00:00', 102)
AND r.DateSubmitted <= CONVERT(DATETIME, '2015-01-01 00:00:00', 102)
THEN 1
END) AS Total,
t.Type
FROM dbo.Refs r
GROUP BY r.Type;
最好的方法取决于您的索引/如果您有或没有表来存储所有类型。
答案 1 :(得分:0)
您不能使用组来实现您想要的 - 请参阅以下帖子 Count Returning blank instead of 0