查询不会返回任何结果
我正在运行一个查询,根据客户的主题统计客户发送的电子邮件。查询不会返回任何结果
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将是完美的。
尝试是这样的..
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语句,则无论日期如何,都将在表格中的每条记录上检查该条件。希望这是有道理的。
谢谢。即使我删除ISNULL,我仍然没有结果。 – DeepDiver
@DeDDiver它不仅仅是删除ISNULL。在上面的答案中注意GROUP BY。 – DarkKnight
@DarkNight,注意到了,谢谢。并且还存在于查询中。 发生此问题的原因是上个月没有特定客户发送电子邮件。如果我运行相同的查询,而没有我查看发送期间的行,那么结果是因为客户在2013年发送了一些电子邮件。 我需要绕过空白结果的情况,如果可能,请执行一些操作。 – DeepDiver
显示查询的其余部分,并为您提供表结构,样本数据和基于此的预期输出。 – Utsav
查询返回结果,如果我评论和排除行以总和关键字在主题中的记录。 如果我运行一个不同的查询来扫描电子邮件表,没有结果。换句话说,当客户从未发送任何电子邮件时,我会得到空白结果。 – DeepDiver