9

假设您想按照以下方式做一些事情:

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

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

4

3 回答 3

32

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

在这种情况下,不需要COUNT. 取而代之的是 use EXISTS,它不是计算所有记录,而是在找到任何记录后立即返回,它的性能要好得多:

SELECT CASE 
    WHEN EXISTS (SELECT 1 FROM table WHERE column2 = 4)    
        THEN 1  
    ELSE 0 
END
于 2012-10-30T13:57:08.577 回答
3

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

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

我发布这个是因为我发现它是一种有趣的方法。在生产中,我通常会得到接近 RedFilter 的答案。

于 2012-10-30T14:04:37.743 回答
-8

你可以这样做:

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

于 2012-10-30T13:59:40.630 回答