我正在运行一个查询,根据客户的主题计算客户发送的电子邮件。
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将是完美的。
答案 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语句,则无论日期如何,都将检查表中每条记录的条件。希望这是有道理的。