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

时间:2012-10-30 13:55:21

标签: 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

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

3 个答案:

答案 0 :(得分:27)

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

在这种情况下,不需要COUNT。相反,请使用EXISTS,而不是计算所有记录,只要找到任何就会返回,这会更好:

SELECT CASE 
    WHEN EXISTS (SELECT 1 FROM table WHERE column2 = 4)    
        THEN 1  
    ELSE 0 
END

答案 1 :(得分:3)

Mahmoud Gammal以一种有趣的方式发布了答案。不幸的是,答案被删除了,因为它返回了记录数而不仅仅是1。这可以使用the sign function来修复,从而产生更紧凑的解决方案:

SELECT sign(count(*)) FROM table WHERE column2 = 4

我发布了这个,因为我找到它并且有趣的方法。在制作中,我通常会得到一些接近RedFilter答案的东西。

答案 2 :(得分:-7)

你可以这样做:

SELECT CASE WHEN COUNT(ID) >=1 THEN 1 WHEN COUNT (ID) <1 THEN 0 END FROM table WHERE Column2=4

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