【发布时间】:2014-01-22 18:35:03
【问题描述】:
我有以下代码:
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)
示例结果:
姓氏电子邮件输入计数
账单为空
拉尔森 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
任何帮助将不胜感激。
谢谢, 克里斯
【问题讨论】: