Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage mit mehreren Bedingungen und Datumangaben

Begonnen von lutschi83, Mai 27, 2015, 14:07:08

⏪ vorheriges - nächstes ⏩

lutschi83

Hallo Leute,
in meiner Abfrage "Faktura" mit den Feldern "Rechnungsdatum", "Firma", "Artikel", "Anzahl", "Einzelpreis", "Erweiterter Preis", "Customernumber", werden im Moment alle verkauften Artikel mit Rechnungsdatum und entsprechender Firma angezeigt.
Problem ist nur, dass die Firmen unterschiedliche Faktura-Zeitpunkte haben, welche ich filtern muss.
Firma X von 21.4 - 20.5, Firma Y von 16.4 - 15.5, Firma Z von 01.04 - 30.04 (letzter Monatstag).
Ist es möglich, die Abfrage so zu gestalten, dass die Faktura-Zeiträume zu den jeweiligen Firmen hinterlegt sind und nur der Monat eingegeben werden muss? Diese Zeiträume wären jetzt für meinen Faktura-Lauf im Mai. Im Juni wäre der Faktura-Zeitraum dementsprechend: Firma X 21.5 - 20.6, Firma Y 16.5 - 15.6, Firma Z von 01.05 - 31.05 (letzter Monatstag). Usw., usw.,
Kann man da über VBA etwas programmieren oder wisst ihr eine Lösung für mein Problem. Die ganze gefilterte Abfrage würde ich dann noch gerne nach Excel exportieren lasse....

Vielen Dank schon einmal im Voraus für eure Hilfe und eure Ideen!!!!

ebs17

#1
Hier fällt mir nur so etwas ein:
PARAMETERS
   [@Betrachtungsmonat] SMALLINT,
   [@Betrachtungsjahr] SMALLINT
;
SELECT
   'Firma X' AS Firma,
   Rechnungsdatum,
   Artikel
FROM
   Faktura
WHERE
   Rechnungsdatum BETWEEN DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat] - 1, 21)
      AND
   DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat], 20)
UNION ALL
   SELECT
   'Firma Y',
   Rechnungsdatum,
   Artikel
FROM
   Faktura
WHERE
   Rechnungsdatum BETWEEN DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat] - 1, 16)
      AND
   DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat], 15)
UNION ALL
   SELECT
   'Firma Z',
   Rechnungsdatum,
   Artikel
FROM
   Faktura
WHERE
   Rechnungsdatum BETWEEN DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat] - 1, 1)
      AND
   DateSerial([@Betrachtungsjahr], [@BetrachtungsMonat], 0)


Um wieviel Firmen handelt es sich? Wechseln diese (Zugänge, Abgänge)? Bei vielen würde man die SQL-Anweisung per VBA zusammensetzen müssen.
Mit freundlichem Glück Auf!

Eberhard

lutschi83

#2
Hallo,
also es sind 7 Distributoren Firmen, die sich auch nicht ändern.
Wie müsste der Code dann aussehen?
Außerdem wenn ich den Code in eine Abfrage einfüge, verlangt er zusätzlich eine Artikelnr....
Er fragt diese nicht aus "Faktura" ab...
SELECT Bestelldetails.[Artikel-Nr], Bestelldetails.Produktcode, Bestelldetails.Anzahl, Bestelldetails.Einzelpreis, CCur([Anzahl]*[Einzelpreis]*(1-[Rabatt])) AS [Erweiterter Preis], Rechnungen.Rechnungsdatum, Bestellungen.[Versandfirmen-Nr], Versandfirmen.Customernumber, Versandfirmen.Firma
FROM Versandfirmen RIGHT JOIN ((Bestellungen LEFT JOIN (Bestelldetails LEFT JOIN [Status für Bestelldetails] ON Bestelldetails.[Status-Nr] = [Status für Bestelldetails].[Status-Nr]) ON Bestellungen.[Bestell-Nr] = Bestelldetails.[Bestell-Nr]) LEFT JOIN Rechnungen ON Bestellungen.[Bestell-Nr] = Rechnungen.[Bestell-Nr]) ON Versandfirmen.ID = Bestellungen.[Versandfirmen-Nr];
ist der Code aus der Abfrage Faktura, falls dir dass weiterhilft....

ebs17

Zitatfalls dir dass weiterhilft....
Die Hilfe brauchte wer ...?

Wenn da plötzlich fünf Tabellen daherkommen statt einer Tabelle/Abfrage, wäre es günstig, zusätzlich zur SQL-Anweisung das Beziehungsbild zu sehen. Dies würde nämlich ermöglichen, eine Lösung gezielt einzubauen statt obige Abfrage schlicht siebenmal zu wiederholen.

Mit OUTER JOIN's gehst Du verschwenderisch um. Ist es sinnvoll, dass es Bestellungen ohne Versandfirma geben kann?

ZitatAußerdem wenn ich den Code in eine Abfrage einfüge, verlangt er zusätzlich eine Artikelnr....
Bezeichnungen kannst Du doch selber anpassen (Artikel => Artikel-Nr), und über die Art des Einfügens möchte ich jetzt nicht raten.

Zur Abänderung der Abfrage:
Rechnungsdatum ist in Rechnungen, Versandfirmen-ID in Bestellungen, beide sind direkt per JOIN verbunden. Aus beiden Tabellen könnte man eine sinngemäße UNION-Abfrage wie oben basteln (mit einem INNER JOIN, wenn die Filterung nachhaltig sein soll) und dann in einem zweiten Schritt die restlichen Tabellen anbinden.
Mit freundlichem Glück Auf!

Eberhard

lutschi83

Hallo,
sorry aber ich habe mit Union-Abfragen überhaupt noch nicht gearbeitet bzw. bin ich noch ein Anfänger was DB angeht.
Anbei lade ich mal die Beziehungen der Tabellen in der Abfrage "Faktura" mit hoch.

Leider steh ich total auf dem Schlauch, was ich als SQL-Befehl eingeben muss, damit ich mein gewünschtes Ergebnis erhalte...