2014-02-25 169 views
0

如果返回計數爲0,我正在運行一個省略了一天的sql查詢。如果計數爲0,我希望我的查詢返回日期和0計數。如果當天銷售0件,我的退貨結果中將省略該日。如果查詢爲空,則顯示0

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

使用COALESCE代替ISNULL。 – Chaitanya

回答

2

您正在從單個表中繪製信息,productionInfo。如果productionInfo沒有包含該日期信息的行(因爲該日期沒有銷售窗口小部件),它如何知道要使用哪個日期?

你可能想看看使用Numbers Table獲得月/年的每一天一排,然後再加入,爲productionInfo所以你必須全天價值,即使這一天是沒有生產。

+0

如果我不必創建不同的表格,這將是理想的。我能以某種方式在我的where子句中指定這個信息嗎? – MasterOfStupidQuestions

+0

WHERE子句只能使用現有信息 - 如果日期信息不在表中,則需要來自某個地方。 如果您將此功能作爲報告功能的一部分,可以嘗試在函數中使用@table變量,並使用值1-31或1-366填充它。 – lyrisey

+0

我創建了一個表來容納可接受的值 - 現在我如何將它與我的查詢綁定,以便表中的所有結果都顯示一個計數? – MasterOfStupidQuestions

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