2016-10-07 3 views
-2

Ich versuche, eine Bedingung in eine count-Anweisung schreiben, wo es nur die Einträge zählen sollte, die kein ENDDATE haben. Ich suche den Zustand im Inneren der Zählung, da dies ein sehr kleiner Teil eines großen SQL-AbfrageBedingung innerhalb einer Zählung -SQL

+0

Bitte beachten Sie, dass es sich bei StackOverflow nicht um einen kostenlosen Code-Schreibservice handelt. Wenn Sie uns nicht genau mitteilen, wie Sie Ihr Problem reproduzieren können und wo Sie Probleme haben, wird es schwierig für uns, Ihnen zu helfen. Beschreiben Sie, was Sie bereits versucht haben, so detailliert wie möglich und stellen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereit. Siehe auch [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask). – MJH

Antwort

0

Beispielabfrage für das Schreiben,

Produkt auswählen, count (*) als Menge

aus Tabelle

wo end_date nach Alter null

Gruppe ist

Diese Abfrage listet Menge für jedes Produkt, das eine nicht haben Enddatum

0

Ein Verfahren verwendet bedingte Aggregation:

select sum(case when end_date is null then 1 else 0 end) as NumNull 
. . . 

Eine andere Methode nur ist zweifacher Hinsicht zu subtrahieren:

select (count(*) - count(end_date)) as NumNull 

count(end_date) zählt die Anzahl, die nichtNULL sind, so subtrahieren diese von Die vollständige Zählung erhält die Nummer NULL.

0

Uhmmmmm.

Es klingt, als ob Sie nach bedingter Aggregation suchen.

Also, wenn Sie eine aktuelle Anweisung, die Art funktioniert (und wir vermuten, dass, nur weil wir etwas nicht sehen Sie bisher versucht haben, ...)

SELECT COUNT(1) 
    FROM mytable t 

Und Sie möchte einen anderen anderen Ausdruck, der eine Anzahl von Zeilen zurückgibt, die einige Bedingungen erfüllen ...

und wenn Sie "kein ENDDATE" sagen, werden Sie in Zeilen zurückgesetzt, die einen ENDDATE-Wert von NULL haben (und wieder , wir raten nur, dass die Tabelle eine Spalte namens ENDDATE hat. Jede Zeile wird eine ENDDATE-Spalte haben.)

Wir verwenden einen ANSI-Standard-kompatiblen CASE-Ausdruck, da dies in den meisten Datenbanken (SQL Server, Oracle, MySQL, Postgres ...) funktionieren würde und wir keine Ahnung haben, welche Datenbank Sie verwenden.

SELECT COUNT(1) 
    , COUNT(CASE WHEN t.ENDDATE IS NULL THEN 1 ELSE NULL END) AS cnt_null_enddate 
    FROM mytable t