Tsql ISNULL(计数(x),0)为null时不返回0
我有以下代码:Tsql ISNULL(计数(x),0)为null时不返回0,tsql,coalesce,isnull,Tsql,Coalesce,Isnull,我有以下代码: 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 Email
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)
样本结果:
姓氏EmailEnteredCount
票据无效
拉尔森51
克里斯蒂30
帕里什空
塞纳克零
该代码正确执行,但有一个异常,即当未找到记录时返回空值,而不是预期的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
任何帮助都将不胜感激
谢谢,
克里斯如果您的isnull在您的计数内,则更有意义。试试这个:
count(isnull(up1.emailaddress, 0))
您需要将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)
谢谢你的快速回复。我试过了,但它仍然返回空值。我还以为您也在使用NOT UP1筛选空值。虽然我不清楚您为什么不使用is NOT null,而是将NOT放在括号外。我想如果可能的话,你能给我们一些样本数据,比如说5行或者其他什么,这样就有可能看到你在用什么?添加了样本结果数据。“不是”的原因是我已经很久没有使用tsql了,这正是它突然出现在我脑海中的原因。现在,我将更仔细地研究这个查询—为什么不将这两个表连接起来呢?这可能会使它更简单:选择firstname、lastname、countisnullup1.emailaddress,0作为来自dbo.userprofiles的电子邮件作为up1,将dbo.SuperProfiles作为up2加入up1.createdby=up2.userid和up1.emailaddress作为up2,其中up2.isstaff=1-如果我在阅读您的评论后误解了您使用子查询的原因,请纠正我,我回去也这么做了,我认为解决方案也能很好地工作,而且可能在性能方面更好。就像我之前说的,我已经很久没有使用sql了,现在就像再次学习骑马一样。谢谢你的帮助和与我一起工作。谢谢你,现在我明白了,这很有意义。