查询不返回任何结果

时间:2017-05-28 05:33:29

标签: sql-server sql-server-2008 tsql

我正在运行一个查询,根据客户的主题计算客户发送的电子邮件。

    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 个答案:

答案 0 :(得分:3)

尝试这样的事情......

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

有什么区别?

WHERE部分在GROUP BY之前执行。因此,通过您的查询,您可以在筛选出其他客户后对结果进行分组。如果将该条件移动到CASE语句,则无论日期如何,都将检查表中每条记录的条件。希望这是有道理的。