🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Komplexere Abfrage mit MAX() klappt nicht

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
schwabbel
Beiträge: 2
Registriert: Di 21. Jan 2014, 07:13

Komplexere Abfrage mit MAX() klappt nicht

Beitrag von schwabbel » Mi 22. Jan 2014, 21:08

Hallihallo zusammen,

ich muss gestehen, dass ich ziemlicher Anfänger bin und vielleicht etwas Wesentliches übersehe. Ich erkläre mal das Szenario:

Ich habe 4 Tabellen:
rechnung (rg_nr, rg_datum)
rechnungsdetails (rgd_id, rgd_rg_nr, rgd_art_nr, rgd_menge) rgd_rg_nr hier ist gleich rg_nr von rechnung
preis (preis_id, preis_art_nr, preis_preis, preis_datum) preis_art_nr hier ist gleich rgd_art_nr von rechnungsdetails
artikel (art_nr, art_eh, art_name) Wird hierfür nicht gebraucht. art_nr hier ist gleich rgd_art_nr von rechnungsdetails und preis_art_nr von preis

Ich habe die DB mal zum Testen hochgeladen: http://wikisend.com/download/370568/rechnungtest.odb

Ich habe das so gemacht, weil ich an Preisen schrauben will, ohne dass sich nachträglich Rechnungbeträge ändern. Ich würde jetzt gerne eine SQL-Abfrage machen, die zu allen Rechnungspositionen den aktuellsten Preis gibt, aber das Gültigkeitsdatum nicht vor dem Rechnungsdatum liegt. Das verknüpfe ich dann später als Unterformular in einem Formular wo ich oben die Rechnungsnummern auswählen kann. Ich vermute, dass ich das zu umständlich mache, da ich mir die Befehle zusammengoogle. Meine Abfrage sieht momentan wie folgt aus:



Zunächst von jeder Rechnung die Nummer und das Datum ermitteln:

Code: Alles auswählen

Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung"
Dann gebe ich das Ganze als Hilfstabelle "a" an die nächste Abfrage nach allen Rechngungspositionen und Verknüpfe die Rechnungsnummer aller Positionen. Damit müsste ich zu jeder Position das Rechnungdatum bekommen:

Code: Alles auswählen

select "a"."a_rg_datum", "a"."a_rg_nr" as "b_rg_nr", "rgd_art_nr" as "b_rgd_art_nr", "rgd_menge" as "b_rgd_menge", "rgd_id" as "b_rgd_id" from "rechnungsdetails" Join
	(Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung")
	as "a" on "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"
Where "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"

Das wiederum will ich mit der Preis-Tabelle verknüpfen (über die Artikelnummer der Tabelle der Rechnungsdetails).

Code: Alles auswählen

select "b"."a_rg_datum", "b"."b_rgd_id", "b"."b_rg_nr", "b"."b_rgd_art_nr", "b"."b_rgd_menge", "preis_preis", "preis_datum" from "preis" join
	(select "a"."a_rg_datum", "a"."a_rg_nr" as "b_rg_nr", "rgd_art_nr" as "b_rgd_art_nr", "rgd_menge" as "b_rgd_menge", "rgd_id" as "b_rgd_id" from "rechnungsdetails" Join
		(Select "rg_nr" as "a_rg_nr", "rg_datum" as "a_rg_datum" from "rechnung")
	as "a" on "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr"
	Where "rechnungsdetails"."rgd_rg_nr" = "a"."a_rg_nr")
as "b" on "preis"."preis_art_nr" = "b"."b_rgd_art_nr"
where "preis_datum" <= "a_rg_datum"
order by "b_rgd_id"
Und hier steige ich aus. Wenn ein Artikel 3 Preisänderungen vor Rechnungsdatum hatte, wird jede Rechnungsdetail-ID 3 mal angezeigt (einmal für jede Änderung).

Wenn ich in Zeile 1 "MAX(preis_datum)....." oder ganz am Ende "GROUP BY "b_rgd_id"" verwende, knallt's... "Keine Aggregatfunktion" oder so ähnlich. Ich habe die Vermutung, dass ich mich zu umständlich anstelle. Hat jemand eine Idee, das sauber zu lösen?

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Komplexere Abfrage mit MAX() klappt nicht

Beitrag von RobertG » Mi 22. Jan 2014, 22:30

Hallo schwabbel,

so ganz alles von dem, was Du da geschrieben hast habe ich nicht mehr gelesen - aber vielleicht hilft Dir die Datei, die ich anhänge. Da ist eine Abfrage drin, die so etwas löst. Ich schicke Dir das als Anhang und nicht im Text, da Du auch die Verknüpfungen unter Extras → Beziehungen noch nicht geregelt hast.

Außerdem dürfte vielleicht zu dem Thema der folgende Link passen:
http://robert.familiegrosskopf.de/base_ ... banken.zip

Gruß

Robert
Dateianhänge
rechnungtest.odb.zip
Zusätzliche Abfrage mit Preisermittlung, Verknüpfungen der Tabellen angelegt
(4.87 KiB) 123-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

schwabbel
Beiträge: 2
Registriert: Di 21. Jan 2014, 07:13

Re: Komplexere Abfrage mit MAX() klappt nicht

Beitrag von schwabbel » Fr 24. Jan 2014, 06:41

Guten Morgen Robert,

das klappt ja wunderbar. Vielen Dank für die schnelle Hilfe. Ich werde jetzt mal ein wenig auf Deiner Seite stöbern :-)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten