2017-05-28 261 views
2

我正在運行一個查詢,根據客戶的主題統計客戶發送的電子郵件。查詢不會返回任何結果

DECLARE @LastMonthNo varchar(2) 
    DECLARE @LastMYear varchar(4) 

    SET @LastMonthNo = DATEPART(m,DATEADD(m,-1,GetDate())) 
    SET @LastMYear = DATEPART(yyyy,DATEADD(m,-1,GetDate())); 

    SELECT 
     CustID, CustName, CustEmail, 
     ISNULL(SUM(CASE WHEN EmailSubject LIKE 'KeyWord' THEN 1 END),0) AS TotalEmail 
    FROM 
     TableEmails 
    WHERE 
     DATEPART(M, DATESENT) = @LastMonthNo 
     AND DATEPART(YYYY, DATESENT) = @LastYearNo 
GROUP BY CustID, CustName, CustEmail 

對於某些客戶,查詢不會返回任何結果。我不是指NULL,我的意思是根本沒有記錄。但是,我需要確定這些客戶。

我該怎麼做才能使查詢生成某種結果?一個0將是完美的。

+1

顯示查詢的其餘部分,併爲您提供表結構,樣本數據和基於此的預期輸出。 – Utsav

+0

查詢返回結果,如果我評論和排除行以總和關鍵字在主題中的記錄。 如果我運行一個不同的查詢來掃描電子郵件表,沒有結果。換句話說,當客戶從未發送任何電子郵件時,我會得到空白結果。 – DeepDiver

回答

3

嘗試是這樣的..

SELECT CustID, CustName, CustEmail, 
     SUM(CASE WHEN EmailSubject LIKE 'KeyWord' 
         AND DATEPART(YYYY,DATESENT)[email protected] 
         AND DATEPART(YYYY,DATESENT)[email protected] 
       THEN 1 ELSE 0 END) AS TotalEmail, 
    FROM TableEmails 
    GROUP BY CustID, CustName, CustEmail 

的區別是什麼?

WHERE部分在GROUP BY之前執行。因此,在您的查詢中,您將其他客戶過濾出來後的結果進行分組。如果您將該條件移至CASE語句,則無論日期如何,都將在表格中的每條記錄上檢查該條件。希望這是有道理的。

+0

謝謝。即使我刪除ISNULL,我仍然沒有結果。 – DeepDiver

+0

@DeDDiver它不僅僅是刪除ISNULL。在上面的答案中注意GROUP BY。 – DarkKnight

+0

@DarkNight,注意到了,謝謝。並且還存在於查詢中。 發生此問題的原因是上個月沒有特定客戶發送電子郵件。如果我運行相同的查詢,而沒有我查看發送期間的行,那麼結果是因爲客戶在2013年發送了一些電子郵件。 我需要繞過空白結果的情況,如果可能,請執行一些操作。 – DeepDiver