2016-10-24 1 views
0

Ich versuche, eine Gesamtzählung Funktion für eine Reihe von Daten mit mehreren Bedingungen, aber habe Probleme damit. Ich bin ein Anfänger und versuchte mit einer einfachen Zählfunktion, aber habe kein Glück. Ich habe mich mit dem Fall beschäftigt, aber habe Probleme damit. Weiß jemand, wie ich über diesen Code gehen soll?Count-Funktion mit mehreren Bedingungen

Hier ein Beispiel für meine Tabelle ist:

Name | Date  | Status | Candy | Soda | Water 
Nancy | 10/19/16 | active | 2 | 0 | 1 
Lindsy| 10/20/15 | active | 0 | 1 | 0 
Erica | 10/20/13 | active | 0 | 2 | 3 
Lane | 10/19/14 | active | 0 | 0 | 4 
Alexa | 10/19/16 | notactive | 0 | 5 | 1 
Jenn | 10/19/16 | active | 0 | 0 | 0 

Ich suche eine Gesamtzahl der Namen unter den Bedingungen zu tun, dass: entweder Süßigkeiten, Limonade oder Wasser sind alles andere als Null ist (doesn Egal, welche Spalte oder wie viele, wenn eine dieser drei nicht Null ist, ist das Konto aktiv und auch wenn das Datum in den letzten zwei Jahren liegt, 10/2014 - 10/2016.

Ich würde die Abfrage wollen, mir zu sagen, dass die Zählung insgesamt betrug 3 und mir auch zeigen:

Name | Date  | Status | Candy | Soda | Water 
    Nancy | 10/19/16 | active | 2 | 0 | 1 
    Lindsy| 10/20/15 | active | 0 | 1 | 0 
    Lane | 10/19/14 | active | 0 | 0 | 4 
+0

Möchten Sie Datensätze, in denen eine _und nur eine_ der drei Spalten nicht null ist oder wenn _any_spalte ungleich Null ist? –

+0

Wenn eine der Spalten nicht null ist –

+1

MySQL oder Oracle? Ich bezweifle, dass es beides ist. – sstan

Antwort

0
SELECT * 
FROM yourTable 
WHERE (Candy > 0 OR Soda > 0 OR Water > 0) AND 
     Status = 'active' AND 
     Date BETWEEN '2014-10-01' AND SYSDATE 
0

Das sind zwei verschiedene Fragen. Die Grundidee, die Reihen zu bekommen, ist:

select t.* 
from t 
where greatest(candy, soda, water) > 0 and 
     status = 'active' and 
     date >= curdate() - interval 2 year; 

(In Oracle, würden Sie sysdate anstatt curdate() nutzen könnten.)

die Zählung zu erhalten, würden Sie count(*) anstatt * im select verwenden. SQL-Abfragen geben nur eine Ergebnismenge zurück. . . so erhalten Sie entweder alle Zeilen oder eine einzige Anzahl.