9

次の行に沿って何かをしたいとしましょう:

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

基本的に、テーブルに 1 つ以上の行がある場合は 1 を返し、それ以外の場合は 0 を返します。これを行うには、文法的に正しい方法が必要です。それは何でしょうか?ありがとう!

4

3 に答える 3

32

質問:テーブルに 1 つ以上の行がある場合は 1 を返し、それ以外の場合は 0 を返します:

この場合、 は必要ありませんCOUNT。代わりに を使用します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これはsignfunctionを使用して修正でき、このよりコンパクトなソリューションにつながります。

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 に答える