如何在Sql Server的SELECT CASE子句中进行比较时使用COUNT()?

Pan*_*sis 5 sql sql-server count aggregate-functions select-case

假设您想要按以下方式执行操作:

SELECT CASE 
    WHEN (SELECT COUNT(id) FROM table WHERE column2 = 4) > 0
    THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

当表中有一行或多行时,基本上只返回1,否则返回0.必须有一种语法正确的方法来做到这一点.可能是什么?谢谢!

Red*_*ter 27

问题:当表中有一行或多行时返回1,否则返回0:

在这种情况下,没有必要COUNT.相反,使用EXISTS,而不是计算所有记录将立即返回任何记录,这表现得更好:

SELECT CASE 
    WHEN EXISTS (SELECT 1 FROM table WHERE column2 = 4)    
        THEN 1  
    ELSE 0 
END
Run Code Online (Sandbox Code Playgroud)


tem*_*ope -8

你可以这样做:

SELECT CASE WHEN COUNT(ID) >=1 THEN 1 WHEN COUNT (ID) <1 THEN 0 END FROM table WHERE Column2=4
Run Code Online (Sandbox Code Playgroud)

参考: http ://msdn.microsoft.com/en-us/library/ms181765.aspx

  • 当仅仅使用“EXISTS”检查任何记录是否存在就足够了时,为什么要计算所有记录呢? (3认同)
  • OP自己的查询有什么问题,这个查询远没有那么复杂? (3认同)
  • @Panzercrisis 为什么,所以你可以在人们纠正它并向你展示正确的方法来完成你要求做的事情之前接受一个错误的答案? (3认同)
  • @JKarthik 抱歉,但这个答案是错误的。这里不需要昂贵的计数,更不用说尝试强制优化器执行两次! (2认同)
  • Panzercrisis 同意其余的(以及-8票)。我的答案不是针对性能进行调整的。亚伦感谢您指出这一点,我同意您的观点。所有,接受答案的选择取决于OP。投票、评论一切都有助于OP做出明智的决定。但凡是适合的,就适合。我认为我的回复是在 RedFilter 发布之后第二次发布的。我的动机是表明,您可以将 CASE 比较与 COUNT() 本身一起向下移动。 (2认同)