PDA

Vollständige Version anzeigen : zwei Abfragen mit Kriterien verknüpfen


Arucad
17.01.2008, 14:00
Hallo Leute.

Probiere jetzt schon eine ganze Weile ein, ich denke mal simples Problem zu lösen. Möchte gerne zwei Abfragen in einer dritten Abfrage verknüpfen. Die erste Abfrage (Jahresbericht; rep_Daten_gefiltert) enthält alle Daten in einem bestimmten Zeitraum. Dann will ich diesen Jahresbericht nochmals mittels zweiter Abfrage (rep_qwr_Gruppen_Filter) filtern. Nur bei der zweiten filterung bekomm ich das nicht passend hin.

Hier mal der Code der Abfrage, die die anderen beiden verbindet:

SELECT DISTINCTROW rep_Daten_gefiltert.GJAHR,
rep_Daten_gefiltert.BUDAT, rep_Daten_gefiltert.HKONT,
rep_Daten_gefiltert.BELNR, rep_Daten_gefiltert.[DMBTR(EUR)],
rep_Daten_gefiltert.SHKZG, rep_Daten_gefiltert.KOSTL,
rep_Daten_gefiltert.AUFNR, rep_Daten_gefiltert.SGTXT,
rep_Daten_gefiltert.LIFNR, rep_Daten_gefiltert.NAME1,
rep_Daten_gefiltert.MATNR, rep_Daten_gefiltert.MEINS,
rep_Daten_gefiltert.COTXT, rep_Daten_gefiltert.CONUM,
rep_Daten_gefiltert.MAKTX, rep_Daten_gefiltert.MENGE,
rep_Daten_gefiltert.FIRMA

FROM rep_qwr_Gruppen_Filter LEFT JOIN rep_Daten_gefiltert
ON rep_qwr_Gruppen_Filter.Lieferantennummer =
rep_Daten_gefiltert.LIFNR

WHERE (((rep_Daten_gefiltert.[DMBTR(EUR)])>=[Formulare]![rep_form_start]![KostenGrenze]
Or
(rep_Daten_gefiltert.[DMBTR(EUR)])<=(-1)*[Formulare]![rep_form_start]![ErstattungsGrenze]))

GROUP BY rep_Daten_gefiltert.GJAHR, rep_Daten_gefiltert.BUDAT,
rep_Daten_gefiltert.HKONT, rep_Daten_gefiltert.BELNR,
rep_Daten_gefiltert.[DMBTR(EUR)], rep_Daten_gefiltert.SHKZG,
rep_Daten_gefiltert.KOSTL, rep_Daten_gefiltert.AUFNR,
rep_Daten_gefiltert.SGTXT, rep_Daten_gefiltert.LIFNR,
rep_Daten_gefiltert.NAME1, rep_Daten_gefiltert.MATNR,
rep_Daten_gefiltert.MEINS, rep_Daten_gefiltert.COTXT,
rep_Daten_gefiltert.CONUM, rep_Daten_gefiltert.MAKTX,
rep_Daten_gefiltert.MENGE, rep_Daten_gefiltert.FIRMA

HAVING (((rep_Daten_gefiltert.BUDAT) Between
[Formulare]![rep_form_start]![BeginnDatum] And
[Formulare]![rep_form_start]![EndeDatum]) AND ((rep_Daten_gefiltert.MAKTX)
Like [Formulare]![rep_form_start]![FilterMaterial])) OR
(((rep_Daten_gefiltert.SGTXT) Like
[Formulare]![rep_form_start]![FilterMaterial]));



Die rot markierte Zeile ist der erste Teil der Verknüpfung. Dieser funktioniert auch. Und zwar Filtert er alle Lieferantennummer aus dem Jahresbericht die in der Abfrag rep_Daten_gefiltert drin stehen.

Nun hab ich in dieser rep_Daten_gefiltert Abfrag noch zwei Kostenstellen (1 und 2) drin stehen. Jetzt soll noch zusätzlich im Jahresbericht geschaut werden (ist nur eine Spalte mit einer Kostenstellennummer) ob im Jahresbericht eine Kostenstelle ist, die zwischen den beiden Kostenstellen (1 und 2) der Filterabfrage enthalten sind.

Testweise hab ich es nur mit einer Kostenstelle probiert und diese auch als LEFT JOIN (oder auch mal als INNER JOIN) eingebunden. Nur dann findet er gar keinen passenden Datensatz mehr.

Die Filterabfrage:

rep_Gruppen.Name Lieferantennummer Kostenstelle1 Kostenstelle2

Schreimel
Schreimel 11607 11608
Schreimel 11632 11631
Schreimel 11650 11641
Schreimel 80696
Schreimel 81903
Schreimel 82592
Schreimel 83644
Schreimel 86693
Schreimel 87208
Schreimel 89323

Es sollen alle diese Lieferantennummer im Jahrebericht gefunden werden und bei denen die Kostenstellen zwischen diesen 3 Wertpaaren liegen.

Zuri
23.01.2008, 21:13
Hallo Arucad,

vielleicht sind es einfach zu viele Abfragen, die aufeinader aufbauen.

Man sucht dann den Elefanten unter der Lupe. :watch:

Vorschlag:

Speichere die ersten beiden Abfragen als Tabellen ab. Diese Tabellen kannst Du dann z. B. miteinader verknüpfen. Jetzt könntest Du die dritte Abfrage aufbauen. Wenn diese nun immer noch nicht klappt, findet man den Fehler garantiert schneller, weil alles schon ein bischen übersichtlicher ist.

Viele Grüße

von

Zuri

:rolleyes: