如果查询中为null,则显示0

时间:2014-02-25 18:38:12

标签: sql-server

我正在运行一个sql查询,如果返回计数为0,则省略该日期。我希望我的查询返回当天,如果计数为0,则返回0计数。我有的话是,如果出售0则为0那天,我的退货结果中省略了这一天。

SELECT ISNULL([day],0) As [day], COUNT(ISNULL(Sold,0)) As [Sold]
FROM productionInfo

2 个答案:

答案 0 :(得分:2)

您正在从单个表productionInfo中提取信息。如果productionInfo没有包含该日期信息的行(因为该日期没有销售小部件),它如何知道要使用的日期?

您可能希望使用Numbers Table为每月/每年的每一天获取一行,然后将其加入productionInfo,这样您就可以获得一天的值,即使有那天没有生产。

答案 1 :(得分:0)

这会给你一个日期表:

CREATE FUNCTION dbo.DatesTable (@startDate DATETIME, @endDate DATETIME) 
RETURNS @retTable TABLE (DateValue DATETIME)
AS
BEGIN
    DECLARE @currentDate DATETIME

    SET @currentDate = @startDate


    WHILE (DATEDIFF(dd, @currentDate, @endDate) >= 0)
    BEGIN
        INSERT INTO @retTable VALUES (@currentDate)

        SET @currentDate = DATEADD(dd, 1, @currentDate)
    END

    RETURN
END

然后您的查询将如下所示:

SELECT dt.DateValue AS [day], COUNT(Sold) AS [Sold] 
FROM dbo.DatesTable('2-1-2014', '2-10-2014') dt
    LEFT JOIN productionInfo pi ON pi.day = dt.DateValue
GROUP BY dt.DateValue