ISNULL() 函数需要两个参数?简单的解决方案
Posted
技术标签:
【中文标题】ISNULL() 函数需要两个参数?简单的解决方案【英文标题】:ISNULL() function requires two arguments? Simple solution 【发布时间】:2012-06-06 14:55:11 【问题描述】:我在 ISNULL() 函数中放错了一些东西,需要另一双眼睛才能找到它。我已经盯着它看太多了,我已经变得脑残了(我知道 ISNULL() 是什么,这只是一个简单的语法错误)
(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0), 0) AS cnt3
FROM teamnames AS tn
LEFT OUTER JOIN caseaudit AS ca
ON tn.teamID = ca.referteamID2
WHERE ca.referteamid1 <> ca.referteamid2 AND isactive = 1 AND groupid = 18 AND accountid = 2 AND referteamid1 = 31 AND auditnote <> 'Suspend Case'
GROUP BY tn.teamtext, tn.teamid) AS c
【问题讨论】:
@jpm0004,您的问题模棱两可,因为正文中没有明确说明您需要什么帮助。我们不知道您是否真正理解 ISNULL() 应该做什么,或者您是否只是需要帮助来追踪语法错误。下次不要急于求成,请尝试帮助我们帮助您。 好的,我编辑了。我认为这个问题已被理解,但我理解它可能令人困惑。对不起大家!感谢您的帮助! 【参考方案1】:ISNULL()
函数需要两个参数,您可以在此处看到:
http://msdn.microsoft.com/library/ms184325.aspx
第一个是正在测试的表达式,第二个是如果测试的表达式计算结果为NULL
,则返回的值。
您的第二个ISNULL()
函数只指定了一个参数:
ISNULL(case when CONVERT(smalldatetime,dModLast,101)
BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end)
你应该试试:
ISNULL((case when CONVERT(smalldatetime,dModLast,101)
BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0)
【讨论】:
+1 这是一个更好的答案,附有参考资料。【参考方案2】:试试这个:
(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)), 0) AS cnt3
FROM teamnames AS tn
LEFT OUTER JOIN caseaudit AS ca
ON tn.teamID = ca.referteamID2
WHERE ca.referteamid1 <> ca.referteamid2 AND isactive = 1 AND groupid = 18 AND accountid = 2 AND referteamid1 = 31 AND auditnote <> 'Suspend Case'
GROUP BY tn.teamtext, tn.teamid) AS c
【讨论】:
如果您能解释问题所在并可能引用参考资料会更好。【参考方案3】:你在错误的地方有一个括号:
ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end , 0)), 0) AS cnt3
CASE 声明“结束”后的通知
【讨论】:
【参考方案4】:这就是答案……我想通了。
注意区别……
原文:
ISNULL(sum(ISNULL(convert(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end), 0), 0)
修订
ISNULL(sum(ISNULL(convert(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)
), 0)
【讨论】:
发布答案后...似乎有 3 个人在我之前回答...他们都是正确的。谢谢大家!以上是关于ISNULL() 函数需要两个参数?简单的解决方案的主要内容,如果未能解决你的问题,请参考以下文章
MySQLMySQL的IFNULL()ISNULL()NULLIF()函数用法说明