我正在运行一个sql查询,如果返回计数为0,则省略该日期。我希望我的查询返回当天,如果计数为0,则返回0计数。我有的话是,如果出售0则为0那天,我的退货结果中省略了这一天。
SELECT ISNULL([day],0) As [day], COUNT(ISNULL(Sold,0)) As [Sold]
FROM productionInfo
答案 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