我有以下代码:
SELECT FirstName, LastName,
(SELECT ISNULL(COUNT(UP1.EmailAddress), 0) AS HasEmail
From dbo.UserProfiles AS UP1
WHERE (NOT (UP1.EmailAddress IS NULL)) AND (CreatedBy = dbo.UserProfiles.UserID)
GROUP BY CreatedBy) AS EmailEnteredCount FROM dbo.UserProfiles WHERE (IsStaff = 1)示例结果:
LastName EmailEnteredCount
帐单为空
拉尔森51
克里斯蒂30
parrish NULL
senac NULL
代码可以正确执行,但有一个例外,当找不到任何记录时,它会返回一个空值,而不是预期的0。我也尝试过使用coalesce,但无济于事。
更新:这返回了我想要实现的东西,只需要一个更干净的解决方案。我真的不认为我需要创建一个临时表来替换空值。
drop table #tt
select userid,firstname, lastname,
(
SELECT count(*) AS HasEmail
FROM dbo.UserProfiles AS UP1
WHERE (UP1.EmailAddress IS NOT NULL)AND (UP1.CreatedBy = UserProfiles.UserId) and (datecreated between @startdate and @enddate)
GROUP BY CreatedBy
) as EmailCount
into #tt
from dbo.UserProfiles where isstaff = 1
select userid,firstname, lastname, ISNULL(EmailCount,0) As EmailCount from #tt任何帮助都将不胜感激。
谢谢,克里斯
发布于 2014-01-23 04:56:56
您需要将isnull函数移到相关子查询之外,如下所示:
SELECT FirstName,
LastName,
IsNull((
SELECT COUNT(UP1.EmailAddress) AS HasEmail
From dbo.UserProfiles AS UP1
WHERE (NOT (UP1.EmailAddress IS NULL))
AND (CreatedBy = dbo.UserProfiles.UserID)
GROUP BY CreatedBy), 0) AS EmailEnteredCount
FROM dbo.UserProfiles
WHERE (IsStaff = 1)发布于 2014-01-23 02:40:03
如果您的isnull在您的计数范围内,这会更有意义。试试这个:
count(isnull(up1.emailaddress, 0))https://stackoverflow.com/questions/21291136
复制相似问题