IsNull在SQL查询中不返回0

时间:2014-03-07 11:57:29

标签: sql count isnull

我尝试过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

由于

2 个答案:

答案 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