In Where Bedingung "not like" & "and" kombinieren

IchHH

Datenbank-Guru
Beiträge
271
Hallo, ich habe mal eine Frage zu Filterung von Tabellen einträgen.

Ich habe eine Tabelle welche ich wie folgt einfiltere:

SQL:
SELECT *
  FROM [dbo].[v_ACDOCA]
  WHERE
Kontonummer IN ('0013600000','0065050010','0065050020','0021120000')
AND Geschäftsjahr>=YEAR(GetDate())-2
AND MATERIALNUMMER <> ''

erweitern wollte ich die Where Bedingung um zwei Einträge die zusammen gelten sollen und zwar:

Code:
 AND (Belegnummer not like 'B%' AND Geschäftsjahr>=YEAR(GetDate())-1)

Wende ich diese aber an, kommt eine ganz andere Anzahl an Datensätzen raus wie ich erwartet hätte. Ich habe das nämlich gegen geprüft. Wenn ich den oberen Code in einer CTE tue und im Select danach nach
Code:
like 'B%' AND Geschäftsjahr >=YEAR(GetDate())-1
filtere, dann komme ich auf ca. 600.000 Einträge die ich von den oberen 2,9 Mio. Datensätze abgezogen hätte. Wenn ich aber die letzte Bedingung mit einfüge kommt als Ergebnis nicht 2,3 Mio. Datensätze raus sondern nur 1,8 Mio. Datensätze. Woran liegt das?
 
Werbung:
Kannst du die vollständigen SQL-Statement Varianten posten? 1x mit der CTE Variante und dann die vermeintlich "falsche" Variante.
Deine Beschreibung verwirrt mich.
 
Lies Dir einfach mal die Reihenfolge bzw. Gewichtung der logischen Operatoren durch und natürlich mußt auch richtig klammern.
 
Werbung:
Ich habe es geschafft. Ich habe die Logik umgedreht in dem ich einfach ein NOT vor die Klammer gesetzt habe. Warum es andersrum nicht geht, verstehe ich dennoch nicht.
 
Zurück
Oben