Ich habe einige Lieferdaten, sagen wir für britische Supermärkte. Die Daten Ich bin an in zwei select
Abfragen setzt sich folgendermaßen zusammen:Wie schreibe ich zwei SQLITE-Abfragen mit unterschiedlichen Bedingungen, um ein Paar Zeilen zurückzugeben
select t2.COMNAME, t0.DELDATE, t1.DELSERN, t1.DELEACTVOL, t3.PRODNAME, t3.PRODEANC from TDELIVER t0 inner join TDELENTR t1 on (t1.DELSERN=t0.DELSERN)
inner join TCOMPANY t2 on (t2.COMSERNO=t0.COMSERNO)
inner join TPRODUCT t3 on (t1.PRODSERN=t3.PRODSERN)
where t1.DELEACTVOL < 0
Welche Ergebnisse liefert, wo DELEACTVOL
ist negativ, so etwas wie dieses, aber mit viel mehr Einträge und realen Daten:
select t2.COMNAME, t0.DELDATE, t1.DELSERN, t1.DELEACTVOL, t3.PRODNAME, t3.PRODEANC from TDELIVER t0 inner join TDELENTR t1 on (t1.DELSERN=t0.DELSERN)
inner join TCOMPANY t2 on (t2.COMSERNO=t0.COMSERNO)
inner join TPRODUCT t3 on (t1.PRODSERN=t3.PRODSERN)
Welche alle Ergebnisse liefert, wo DELEACTVOL
ist negative oder positive, etwa so:
Wie Sie gleich sehen können, sind die beiden Abfragen abgesehen von der Tatsache ein herausfiltert (die Mehrheit) von positiven Volumen Einträge. Jede Lieferung hat eine einzigartige DELSERN
.
Ich brauche eine Abfrage, die mir jeden DELSERN
(jede Lieferung), wie die DELSERN
XXXX.......89
geben wird, am 24. Mai an Tesco geliefert, die einige Produkteigenschaften, sagen Product A
mit einem negative delivery volume
NUR, wenn es in ist die gleiche Lieferung eine positive delivery volume
für dieses Produkt. In den Beispieldaten sollte XXXX.......37
nicht zurückgegeben werden. Ich habe das Gefühl, ich sollte WHERE IN
oder JOIN
verwenden, aber ich weiß es nicht.
Ich habe versucht:
select t2.COMNAME, t0.DELDATE, t1.DELEACTVOL, t3.PRODNAME, t3.PRODEANC from TDELIVER t0 inner join TDELENTR t1 on (t1.DELSERN=t0.DELSERN)
inner join TCOMPANY t2 on (t2.COMSERNO=t0.COMSERNO)
inner join TPRODUCT t3 on (t1.PRODSERN=t3.PRODSERN)
where t1.DELEACTVOL < 0
and EXISTS(select p2.COMNAME, p0.DELDATE, p1.DELEACTVOL, p3.PRODNAME, p3.PRODEANC from TDELIVER p0 inner join TDELENTR p1 on (p1.DELSERN=p0.DELSERN)
inner join TCOMPANY p2 on (p2.COMSERNO=p0.COMSERNO)
inner join TPRODUCT p3 on (p1.PRODSERN=p3.PRODSERN)
where p1.DELEACTVOL > 0 and t1.DELSERN = p1.DELSERN)
ORDER by t1.DELEACTVOL
... in der Hoffnung, dass and t1.DELSERN = p1.DELSERN
Teil den Trick tun würde, aber dies gibt das gleiche wie die die erste Abfrage. Ich schätze, weil jede Lieferung, die ein negatives Volumen für Produkt A mindestens einige positive Produkte haben würde? Muss ich wahrscheinlich auch PRODNAME
berücksichtigen?
Jede Hilfe wäre großartig.
kann es mehr als ein solches Paar für eine gegebene delesern? –
Ja, es kann –