一个varchar如果您有存储你的类型的表,你可以使用:
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;
最好的方法将取决于您的索引/如果你这样做,或者没有一个表来存储所有类型。
如果没有找到记录则没有什么为ISNULL,凯斯等被应用到。 –