2012-10-30 4 views
5

Angenommen, Sie haben etwas in den folgenden Zeilen mögen:Wie können Sie COUNT() in einem Vergleich in einer SELECT CASE-Klausel in Sql Server verwenden?

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

Im Grunde nur 1 zurück, wenn es in der Tabelle eine oder mehrere Zeilen ist, sonst 0. Es muss einen grammatikalisch korrekten Weg geben, dies zu tun. Was könnte es sein? Vielen Dank!

+0

Zum Testen der Existenz hat RedFilter die Antwort. Im Allgemeinen ist Ihre Abfrage für Testzählung korrekt, wie sie ist (solange ein gültiger Tabellenname für "Tabelle" substriert ist.) – RichardTheKiwi

+0

Wenn Sie Wert auf Leistung legen, haben Sie die falsche Antwort akzeptiert. Nicht sicher, warum Sie Eile wünschen oder nehmen wir an, dass die erste Antwort die beste Lösung sein muss –

Antwort

-8

Sie dies tun könnte:

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

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

+0

StackOverflow muss die Leute wirklich loslassen und Antworten akzeptieren, sobald sie anfangen zu kommen, sie nicht 10 Minuten warten lassen. Ich werde deine in einer Minute annehmen. – Panzercrisis

+3

Warum sollten alle Datensätze gezählt werden, wenn nur die Existenz von EXISTS überprüft wird? – RedFilter

+0

Nun, es war nur ein Beispiel dafür, wie es verwendet werden könnte. Danke, Mann, mir war nicht klar, dass es ein Schlüsselwort gab konzentrierte sich auf das Beispiel ein wenig zu viel. – Panzercrisis

27

Frage: Rückkehr 1, wenn es eine ist oder mehrere Zeilen in der Tabelle, sonst 0:

In diesem Fall gibt es keine Notwendigkeit für COUNT. Verwenden Sie stattdessen EXISTS, die nicht alle Datensätze zu zählen zurückkehren wird, sobald jede gefunden wird, was viel besser abschneidet:

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

Mahmoud Gammal schrieb eine Antwort mit einem interessanten Ansatz. Leider wurde die Antwort aufgrund der Tatsache gelöscht, dass sie die Anzahl der Datensätze anstatt nur 1 zurückgegeben hat. Dies kann the sign function mit fixiert werden, was zu dieser kompaktere Lösung:

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

ich gepostet, weil ich es und interessanten Ansatz finden. In der Produktion würde ich normalerweise etwas mit RedFilters Antwort anfangen.

+1

ISNULL ist auf COUNT() redundant, das nie NULL zurückgibt. – RichardTheKiwi

+0

@RichardTheKiwi Ich hätte das merken müssen; Danke für den tollen Tipp! Ich habe meine Antwort bearbeitet. – GolfWolf

Verwandte Themen