Seite 1 von 1

Abfrage für Bericht zusammenfassen

Verfasst: Do, 05.07.2018 22:33
von Welpe
Moin,

ich bin neu bei OpenOffice und versuche mich an meiner ersten Datenbank. Die Tabellen und Formulare sind erstellt und funktionieren nach meinen Vorstellungen. Nun möchte ich dazu einen Bericht erstellen wie in "Beispiel_Bericht_Rechnung.odb" aus den Beispieldatenbanken Handbuch V60, wo die komplette Adresszeile einer Tabelle zu einem Feld in einer Abfrage zusammengefasst wird.

Die Abfrage aus dem oben genannten Beispiel schaut so aus und mich interessiert, wie das Feld "Kunde" zustande kommt.

SELECT MIN( "ID" ) "ID", SUM( "Anzahl" ) "Anzahl", "Rechnung_ID", "Ware_ID", "Datum", "Ware", "Preis", "Preis" * ( SELECT SUM( "Anzahl" ) FROM "Verkauf" WHERE "Ware_ID" = "a"."Ware_ID" AND "Rechnung_ID" = "a"."Rechnung_ID" ) "Anzahl*Preis", ( SELECT SUM( "Preis" * "Anzahl" ) FROM "Ware", "Verkauf" WHERE "Verkauf"."Rechnung_ID" = "a"."Rechnung_ID" AND "Ware"."ID" = "Verkauf"."Ware_ID" ) "Summe",
( SELECT "Anrede" || CHAR( 13 ) || "Vorname" || ' ' || "Nachname" || CHAR( 13 ) || "Straße" || CHAR( 13 ) || "Postleitzahl" || ' ' || "Ort" FROM "Kunde", "Rechnung" WHERE "Kunde"."ID" = "Rechnung"."Kunde_ID" AND "Rechnung"."ID" = "a"."Rechnung_ID" ) "Kunde", ( SELECT YEAR( "Datum" ) || '-' || "ID" FROM "Rechnung" WHERE "ID" = "a"."Rechnung_ID" ) "Rechnungsnummer" FROM "Verkauf" AS "a", "Rechnung", "Ware" WHERE "Rechnung_ID" = IFNULL( ( SELECT "Integer" FROM "Filter" WHERE "ID" = TRUE ), "Rechnung_ID" ) AND "Rechnung_ID" = "Rechnung"."ID" AND "Ware_ID" = "Ware"."ID" GROUP BY "Rechnung_ID", "Ware_ID", "Datum", "Ware", "Preis"

Ich habe mir zum testen zwei Abfragen erstellt, die einzeln für sich auch funktionieren:

Tabelle "Fahrzeuge" mit den Feldern "ID" "Hersteller" "Modell" "Adressen_ID"
Tabelle "Adressen" mit den Feldern "ID" "Anrede" "Vorname" "Nachname" "Straße" "PLZ" "Ort"

SELECT "Hersteller", "Modell" FROM "Fahrzeuge"
SELECT "Anrede" || CHAR( 13 ) || "Vorname" || ' ' || "Nachname" || CHAR( 13 ) || "Straße" || CHAR( 13 ) || "PLZ" || ' ' || "Ort" FROM "Adressen", "Fahrzeuge" WHERE "Adressen"."ID" = "Fahrzeuge"."Adressen_ID"

Kombiniere ich diese beiden wie im obigen Beispiel, bekomme ich eine Fehlermeldung: Single value expected in Statement...

SELECT "Hersteller", "Modell", (SELECT "Anrede" || CHAR( 13 ) || "Vorname" || ' ' || "Nachname" || CHAR( 13 ) || "Straße" || CHAR( 13 ) || "PLZ" || ' ' || "Ort" FROM "Adressen", "Fahrzeuge" WHERE "Adressen"."ID" = "Fahrzeuge"."Adressen_ID") "Kunde" FROM "Fahrzeuge"

Die Beispielabfrage funktioniert auf meinem System, meine beiden zusammengelegten Abfragen leider nicht. Kann mir jemand helfen und mir einen stubs in die Richtige Richtung geben?

Ich benutze AOo 4.1.5 mit Java 1.8.0_172 unter Windows 10

Re: Abfrage für Bericht zusammenfassen

Verfasst: Fr, 06.07.2018 07:41
von RobertG
Hallo Welpe,

in Deiner Unterabfrage sind so mehrere Datensätze enthalten. Das funktioniert nicht. Du musst die Unterabfrage irgendwie mit der äußeren Abfrage verbinden:

Code: Alles auswählen

SELECT "Hersteller", "Modell", 
(SELECT "Anrede" || CHAR( 13 ) || "Vorname" || ' ' || "Nachname" || CHAR( 13 ) || "Straße" || CHAR( 13 ) || "PLZ" || ' ' || "Ort" 
FROM "Adressen" WHERE "Adressen"."ID" = "a"."Adressen_ID") "Kunde" 
FROM "Fahrzeuge" AS "a"
Dieser Code könnte schon reichen. In der Unterabfrage bezieht sich die Adresse direkt auf den Datensatz, der gerade bei der Tabelle "Fahrzeuge" abgefragt wird. Schau einmal im Handbuch unter "korrelierende Unterabfrage" nach.

Gruß

Robert

Re: Abfrage für Bericht zusammenfassen

Verfasst: Sa, 07.07.2018 07:19
von Welpe
Moin Robert,

das ich die Abfragen verbinden muss, wusste ich nicht. Vielen Dank für deine Hilfe, jetzt funktioniert es.
Die Unterabfragen im Handbuch werde ich mir mal genauer anschauen.