2016-07-01 5 views
0

hallo Hilfe bitte verwirrt ...Zählung nicht gehorchen, wo Klausel

Ich habe diese Abfrage, die nur die Zählungen für die Typ-I-Spalte ziehen nehme an, aber wenn ich es laufen, zieht er die Zählung für die gesamte aus Datenbank und tut die Regel, wo Klausel gehorcht ...

SELECT [type], typei, vtdate, count (typei) as count 
FROM vtindex 
where typei is not null or typei <> '#' 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei, vtdate 
HAVING 
COUNT(typei) > 1 

die Idee ist, dass der Benutzer in einem Zeitpunkt Spam setzt, und ihnen die Grafen von Typ I zu diesem bestimmten Zeitpunkt Spam

dank gibt ...

+2

Ohne zu wissen, wie Ihre Daten aussehen (z. B. Ihre Frage bearbeiten und einige Beispieldaten einfügen) und erwartete Ergebnisse (d. H. Ihre Frage bearbeiten und auch diese hinzufügen), ist es unwahrscheinlich, dass wir die Abfrage korrigieren können. –

+1

Ich denke, Sie müssen die Spalte 'typei' aus Ihrer Select-Klausel entfernen und nur' [type], vtdate, count (typei) 'auswählen. Und entfernen Sie es aus der Group-by-Klausel. – irene

+0

@damien_The_Unbeliever Sie brauchen keine Daten für eine Abfrage imho unten sehen sie unten haben bereits begonnen, die Abfrage zu beheben und einer von ihnen ist schon richtig, aber danke für die Eingabe .... – Troz

Antwort

1

versuchen diese:

SELECT [type], typei, count (typei) as count 
FROM vtindex 
where typei is not null or typei <> '#' 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei 
HAVING 
COUNT(typei) > 1 

Idee ist, indem sie es in anderen Bereichen als Typ I und Gruppe zu entfernen.

Viel Glück!

+0

Dies ist funktioniert einfach nicht das '#' aus irgendeinem Grund ausschließen – Troz

+0

Ich denke, Sie sollten mit Bedingung arbeiten: versuchen Sie, Klammern hier: where (typei ist nicht null oder typei <> '#') und ... –

2

In der GROUP BY -Klausel müssen nur die Spalten vorhanden sein, nach denen Sie gruppieren möchten, nicht die Spalten, die Sie zählen oder addieren möchten. Also versuchen Sie es mit:

SELECT [type], vtdate, count(typei) as count 
FROM vtindex 
WHERE typei IS NOT NULL OR typei <> '#' 
    and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY [type], vtdate 
HAVING count(typei) > 1 
+0

soz nicht funktioniert, zieht die gesamte db – Troz

2

Fügen Sie Klammern hinzu, um die Datensätze ordnungsgemäß zu filtern.

Derzeit wo Sie Klausel in folgender Reihenfolge

validiert
Where typei IS NOT NULL OR (typei <> '#' 
    and vtdate between '2016/06/01' and '2016/06/30') 

Aber Sie brauchen diese

Where (typei IS NOT NULL OR typei <> '#') 
    and vtdate between '2016/06/01' and '2016/06/30' 
+0

half das tut mir leid dumm Ich dachte nicht, um die Where-Klausel zu klassifizieren, die ich normalerweise tue, ad das hilft mir, das Problem zu lösen, so danke ... – Troz

0

ich denke, es so sein sollte;)

SELECT [type], typei, vtdate, count (typei) as count 
FROM vtindex 
where (typei is not null or typei <> '#') 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei, vtdate 
HAVING 
COUNT(typei) > 1 

Ohne diese Klammern , wenn typei nicht null ist, werden die anderen Bedingungen nicht berechnet.

+0

das wird für einen anderen Bericht danke, aber auch das '#' aus irgendeinem Grund – Troz