Hallo Werner,
Dein Fehler liegt hier:
Suchst Du Kunden, die die Produkte 1 und 3 gekauft haben, dann muss dieser Wert weiterhin 2 sein. Warum?
Die beiden inneren, durch UNION verbundenen, SELECT suchen die Kunden, die beide Produkte gekauft haben. Dabei gibt das erste SELECT eine Ergebnistabelle für Produkt 1, die zweite für Produkt 3 zurück. Beide Ergebnistabellen werden durch UNION verbunden, so dass eine Gesamtergebnistabelle entsteht. Dabei ergeben sich folgende Konstellationen.
Kunde hat nur Produkt 1 gekauft >> Kdnr erscheint nur in der ersten Tabelle >> Kdnr nur einmal vorhanden
Kunde hat nur Produkt 3 gekauft >> Kdnr erscheint nur in der zweiten Tabelle >> Kdnr nur einmal vorhanden
Kunde hat beide Produkte gakauft >> Kdnr kommt in beiden Ergebnistabelllen vor >> Kdnr zweimal vorhanden
Die DISTINCTS sorgen dafür, dass die Kombination cs_Jahr, cs_Kdnr nur einmal in den Teilergebnistabellen vorhanden sein kann.
Somit gilt - und da kommen wir zu Deiner Frage:
Außerdem habe ich noch nicht verstanden, warum Du zum Schluss nochmal einen COUNT(cs_kdnr) = 2 setzt
Wenn in der UNION Ergebnistabelle für ein angegebenes Jahr (was Du über die HAVING Klausel einschränkst) eine Kundennummer zweimal vorkommt, dann muss sie in beiden Teiltabellen genau einmal vorhanden sein. Das wiederum bedeutet, dass der Kunde Produkt 1 und Produkt 2
gekauft hat. Ich hoffe, es ist verständlich geworden?
-----------
Wäre nur in dem Fall richtig, wenn Du nach Kunden suchst, die 3 Produkte gekauft haben. Das erfordert dann aber auch das Einfügen eines weiteren SELECTS in die UNION
Code: Alles auswählen
(
SELECT DISTINCT cs_kdnr, cs_jahr
FROM cselling WHERE cs_egrp = 1
UNION ALL
SELECT DISTINCT cs_kdnr, cs_jahr
FROM cselling WHERE cs_egrp = 3
UNION ALL
SELECT DISTINCT cs_kdnr, cs_jahr
FROM cselling WHERE cs_egrp = 4
) AS t1
Gruß Barlee