Forum: Datenbanken
by Uwe Raabe,
11. Apr 2024
In der Tat. Ich muss den Part deiner Antwort irgendwie überlesen haben, sonst hätte ich mich darauf bezogen. Sorry!
Forum: Datenbanken
by Uwe Raabe,
10. Apr 2024
Nicht zwingend.
SELECT K.KdNr, K.Name
FROM Kunden K
INNER JOIN Rechnungen R ON K.KdNr = R.KdNr
LEFT JOIN Positionen P1 ON R.ReNr = P1.ReNr AND P1.Artikel = 4701
LEFT JOIN Positionen P2 ON R.ReNr = P2.ReNr AND P2.Artikel = 5702
GROUP BY K.KdNr, K.Name
HAVING COUNT(P1.ReNr) > 0 and COUNT(P2.ReNr) = 0;
Forum: Datenbanken
by Uwe Raabe,
10. Apr 2024
Hmmm, ich habe mal dein Beispiel entsprechend ergänzt:
Kunde 1 (Meier) hat nun Rechnung 100 mit 4701 und Rechnung 300 mit 5702, hat also A und B gekauft. Trotzdem wird er im Ergebnis angezeigt.
Forum: Datenbanken
by Uwe Raabe,
10. Apr 2024
Das ist mir schon klar, aber mit INNER JOIN Positionen P1 ON R.ReNr = P1.ReNr AND P1.Artikel = A werden ja nur Rechnungen selektiert, bei denen mindestens ein A in den Positionen vorkommt. Damit werden Rechnungen, bei denen kein A aber ein B vorkommt nicht berücksichtigt. Wenn also ein Kunde eine Rechnung nur mit A und eine nur mit B hat, würde er fälschlicherweise in die Ergebnismenge...
Forum: Datenbanken
by Uwe Raabe,
10. Apr 2024
So nur vom drüberlesen: Fallen da nicht alle Rechnungen raus, bei denen kein A aber ein B enthalten sind?
Forum: Datenbanken
by Uwe Raabe,
9. Apr 2024
Ich würde das ja auch lieber an realen Daten ausprobieren. In der Theorie sieht ja vieles einfacher aus als es hinterher in der Praxis ist.
Forum: Datenbanken
by Uwe Raabe,
9. Apr 2024
In der Tat, die Zeile ist mir beim Übertragen wohl verloren gegangen.
Forum: Datenbanken
by Uwe Raabe,
8. Apr 2024
Das müsste doch aber auch mit Joins anstatt Sub-Selects funktionieren.
So aus dem Ärmel, ohne das hier testen zu können:
select k1.*
from kunden k1
join rechnungen r1 on r1.kdnr = k1.kdnr
join positionen p1 on p1.renr = r1.renr and p1.artikel = 'X'
join positionen p2 on p2.renr = r1.renr and p2.artikel = 'Y'
having (Count(p1.artiklel) > 0) and (Count(p2.artikel) = 0)