2017-12-08 11 views
0

Das wird unglaublich einfach scheinen, aber ich kann nicht herausfinden, warum die folgende Abfrage eine falsche Zahl zurückgibt.SUMME in SQL, die falsche Menge zurückgeben

Ich habe den Datensatz in Excel eingegeben und die Berechnungen nur zur Überprüfung durchgeführt. Die Summe von m1 ist 36785. Wenn ich Bereiche 900 und 995 entferne. Es kommt zu 18653. Was ist der Fehler, wenn man sich diese Abfrage anschaut? Wenn ich die() aus sie verlassen, berechnet der Wert 1716093. ist die Abfrage, wie unten gezeigt gibt einen Wert von 36785.

select sum(m1) 
from dbo.sizeclassreportgov 
where own='10' and (area !='900' or area != '995'); 

Antwort

1

Ich denke, was Sie suchen wird:

select sum(m1) 
from dbo.sizeclassreportgov 
where own='10' and area not in ('900', '995'); 

area !='900' or area != '995' wird immer als wahr ausgewertet (es sei denn area ist NULL).

(Wenn area keine NULL Werte enthält, müssen Sie würde (area not in ('900', '995') or area is null) verwenden.)

+0

warum Bereich! = '900' oder Gegend! = '995' bewerten immer wahr? –

+0

danke für die Hilfe. Es hat perfekt funktioniert. –

+0

Es liegt daran, dass es sich um eine ODER-Bedingung handelt, sodass eine der beiden Bedingungen für eine echte Auswertung ausreicht. ''900'! = '995'', also' '900'' wird immer noch wahr zurückgeben. Wenn du die Klammern wegnehmen würdest und es einfach zu einem "AND" statt einem "OR" machen würdest, würde das auch funktionieren. –