如果返回計數爲0,我正在運行一個省略了一天的sql查詢。如果計數爲0,我希望我的查詢返回日期和0計數。如果當天銷售0件,我的退貨結果中將省略該日。如果查詢爲空,則顯示0
SELECT ISNULL([day],0) As [day], COUNT(ISNULL(Sold,0)) As [Sold]
FROM productionInfo
如果返回計數爲0,我正在運行一個省略了一天的sql查詢。如果計數爲0,我希望我的查詢返回日期和0計數。如果當天銷售0件,我的退貨結果中將省略該日。如果查詢爲空,則顯示0
SELECT ISNULL([day],0) As [day], COUNT(ISNULL(Sold,0)) As [Sold]
FROM productionInfo
您正在從單個表中繪製信息,productionInfo
。如果productionInfo
沒有包含該日期信息的行(因爲該日期沒有銷售窗口小部件),它如何知道要使用哪個日期?
你可能想看看使用Numbers Table獲得月/年的每一天一排,然後再加入,爲productionInfo
所以你必須全天價值,即使這一天是沒有生產。
如果我不必創建不同的表格,這將是理想的。我能以某種方式在我的where子句中指定這個信息嗎? – MasterOfStupidQuestions
WHERE子句只能使用現有信息 - 如果日期信息不在表中,則需要來自某個地方。 如果您將此功能作爲報告功能的一部分,可以嘗試在函數中使用@table變量,並使用值1-31或1-366填充它。 – lyrisey
我創建了一個表來容納可接受的值 - 現在我如何將它與我的查詢綁定,以便表中的所有結果都顯示一個計數? – MasterOfStupidQuestions
這會給你一個日期表:
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
使用COALESCE代替ISNULL。 – Chaitanya