2017-05-28 264 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