Abfrage für Bericht zusammenfassen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Welpe
*
Beiträge: 11
Registriert: Sa, 19.05.2018 20:28

Abfrage für Bericht zusammenfassen

Beitrag 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
AOO 4.1.5 | Win10 + LO 6.0.7 | Mint 19.2
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage für Bericht zusammenfassen

Beitrag 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
Welpe
*
Beiträge: 11
Registriert: Sa, 19.05.2018 20:28

Re: Abfrage für Bericht zusammenfassen

Beitrag 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.
AOO 4.1.5 | Win10 + LO 6.0.7 | Mint 19.2
Antworten