IN Operation

Hoppel

Aktiver Benutzer
Beiträge
38
Hallo,

ich möchte mir all die Adressennummern von Kunden ausgeben lassen, die im Zeitraum 01.03.2016 bis heute bestellt haben, aber nicht im Zeitraum 01.01.2012 bis 29.02.2016.

Code:
SELECT   b.Adressnummer,
     isnull(sum(b.menge),0) AS Absatzmenge2016,
     isnull(ROUND(SUM(b.Menge*b.Einzelpreis),2),0) as Umsatz
FROM   Artikel a
LEFT JOIN Bestellungen b
ON     a.Artikelnummer = b.Artikelnummer
AND     convert(DATE,b.datum) BETWEEN '01.03.2016' AND '01.01.2017'
WHERE b.Adressnummer NOT IN
(SELECT b.adressnummer FROM artikel a LEFT JOIN Bestellungen b on a.Artikelnummer = b.Artikelnummer AND convert(DATE, b.datum) BETWEEN '01.01.2012' and '29.02.2016' )
group by b.adressnummer

Das ist mein bisheriger Ansatz, aber es wird eine leere Ergebnismenge geliefert, was eigentlich nicht sein kann. Wo liegt mein Denkfehler?
 
Werbung:
Liefert dein NOT IN eventuell auch einen NULL-Wert mit? Das musst du abfangen mit z.B. WHERE b.adressnummer IS NOT NULL im Subselect.
 
Ich habe es überprüft und es wurden NULL-Werte zurückgegeben. Ich habe es mit "is not null" abgefangen, aber die Query liefert nun immer noch ein leeres Ergebnis.
 
Ohne den WHERE Teil bekommst du Ergebnisse und es gibt in diesem Ergebnis Adressmummern die nicht in dem Subselect geliefert werden?
 
Ohne den WHERE NOT EXISTS Teil bekomme ich 1940 Ergebnisse zurück.

Ohne die Aggregatfunktionen scheint es zu funktionieren. Folgendes Statement liefert mir 458 Ergebnisse zurück.

Code:
SELECT distinct  b.Adressnummer
FROM   Bestellungen b
WHERE convert(DATE,b.datum) BETWEEN '01.03.2016' AND '01.01.2017' AND b.Adressnummer NOT IN
(SELECT distinct b.adressnummer FROM   Bestellungen b  WHERE convert(DATE,b.datum) BETWEEN '01.01.2012' AND '29.02.2016' )
 
Werbung:
wenn du vom 1.3. bis heute haben willst (als eine Bedingung), warum fragst dann nach BETWEEN '01.03.2016' AND '01.01.2017' ab? Gibt es kein CURRENT_DATE oder sowas?
 
Zurück
Oben