Summe von zwei Spalten aus zwei Tabellen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Summe von zwei Spalten aus zwei Tabellen

Beitrag von smoffice »

Hallo zusammen,
ich bin neu hier und hätte gern ein Problem gelöst.

ich habe zwei Tabellen (Konto Eingang, Konto Ausgang) mit Spalten für Konto Nummer in beiden Tabellen und je eine Spalte für Eingang bzw. Ausgang.

Nun möchte ich beide Tabellen abfragen und die Summe von Ein- und Ausgang bilden wo die Kontonummer in beiden Tabellen identisch ist.

Ich hoffe Ihr versteht mein Problem

Bis bald dann mal
smoffice :?:
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey smoffice,

und, wo ist das Problem? Genau dafür sind Abfragen da :-)

Beide Tabellen Laden, die Felder "Konto-Nummern" in der Grafik verbinden (mit der Maus eine Verbindung ziehen) - dadurch wird die Abhängigkeit der Tabellen hergestellt.
Dann einmal ein Feld "Kontonummer", die Felder "Eingang" und "Ausgang" aus den verschiedenen Tabellen und ein neues Feld erzeugen mit der Formel
"Eingang" - "Ausgang", dem kannst du als Alias ja den Namen "Saldo" geben :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Beitrag von smoffice »

Hallo Thomas,

vielen Dank für die Antwort.

Deine Antwort macht nicht exakt das was ich meinte.

Ich möchte die Summe meiner Eingänge von der Summe meiner Ausgaben bei Übereinstimmung der Kontonummern in beiden Tabellen abziehen.

Viele Grüße
Dieter
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Beitrag von Barlee »

Hallo smoffice,

benutzt Du die Base-interne Datenbank oder eine andere, wie z.B. MySQL?

Gruß Barlee
smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Beitrag von smoffice »

Ja, ich benutze die Base-Interne Datenbank, keine MySQL etc
Gruß Dieter :)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Beitrag von Barlee »

Hallo Dieter,

Deine Angaben:
Es gibt zwei Tabellen (Konto_Eingang, Konto_Ausgang)
Eingang hat die Spalten "Konto_Nummer" und "Eingang"
Ausgang hat die Spalten "Konto_Nummer" und "Ausgang"

-wähle auf der linken Seite in Deiner DB "Abfragen" aus
-klicke auf "Abfrage in SQL Ansicht erstellen..."
-kopiere folgende Abfrage dort hinein und passe ggf noch die Schreibweisen der Tabellen-/Spaltennamen an

Code: Alles auswählen

select 

a.Konto_Nummer, 
b.Eingang_sum-a.Ausgang_sum as Diff_Ein_Aus 

from

(select Konto_Nummer, sum(Ausgang) as Ausgang_sum from Konto_Ausgang group by Konto_Nummer) a,
(select Konto_Nummer, sum(Eingang) as Eingang_sum from Konto_Eingang group by Konto_Nummer) b

where a.Konto_Nummer = b.Konto_Nummer
-klicke in der Symbolleiste oben auf "Abfrage ausführen"

Hoffe, es ist das, was Du suchst...
Gruß Barlee
smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Beitrag von smoffice »

Hallo Barlee,
Danke für die schnelle Reaktion.
ich habe das Statement wie folgend angepasst und erhalte dann einen Syntaxfehler, den ich direkt dahinter kopiert habe.
Dabei fällt mir auf, dass die Auswahl der Tabellen in der FROM Anweisung mit AS deklariert wird. Das habe ich Fett Markiert.

select
AUS_TAB.AUS_KTO,
EIN_TAB.EIN_SUMME-AUS_TAB.AUS_SUMME as Saldo
from
(select AUS_KTO, sum(AUS_SUMME) as Ausgang_sum from AUS_TAB group by AUS_KTO) AUS_TAB,
(select EIN_KTO, sum(EIN_SUMME) as Eingang_sum from EIN_TAB group by EIN_KTO) EIN_TAB
where EIN_TAB.EIN_KTO = AUS_TAB.AUS_KTO

SELECT
"AUS_TAB"."AUS_KTO",
"EIN_TAB"."EIN_SUMME" - "AUS_TAB"."AUS_SUMME" AS "Saldo"
FROM
( SELECT "AUS_KTO", SUM( "AUS_SUMME" ) AS "Ausgang_sum" FROM "AUS_TAB" GROUP BY "AUS_KTO" ) AS "AUS_TAB",
( SELECT "EIN_KTO", SUM( "EIN_SUMME" ) AS "Eingang_sum" FROM "EIN_TAB" GROUP BY "EIN_KTO" ) AS "EIN_TAB"
WHERE "EIN_TAB"."EIN_KTO" = "AUS_TAB"."AUS_KTO"

Viele Grüße
Dieter
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Beitrag von Barlee »

Hallo Dieter,

... bei Deiner Abfrage war einiges durcheinander ... :wink:
Unter Beachtung Deiner Tabellennamen und Spaltenbezeichner sieht die korrekte Umsetzung meines Vorschlags folgendermaßen aus:

Code: Alles auswählen

select

a.Aus_Kto,
b.Eingang_sum-a.Ausgang_sum as Saldo

from

(select Aus_Kto, sum(Aus_Summe) as Ausgang_sum from Aus_Tab group by Aus_Kto) a,
(select Ein_Kto, sum(Ein_Summe) as Eingang_sum from Ein_Tab group by Ein_Kto) b

where 

a.Aus_Kto = b.Ein_Kto


bzw. "ausführlich"

Code: Alles auswählen

SELECT 

"a"."Aus_Kto", 
"b"."Eingang_sum" - "a"."Ausgang_sum" AS "Saldo" 

FROM 

( SELECT "Aus_Kto", SUM( "Aus_Summe" ) AS "Ausgang_sum" FROM "Aus_Tab" GROUP BY "Aus_Kto" ) AS "a", 
( SELECT "Ein_Kto", SUM( "Ein_Summe" ) AS "Eingang_sum" FROM "Ein_Tab" GROUP BY "Ein_Kto" ) AS "b" 

WHERE 

"a"."Aus_Kto" = "b"."Ein_Kto"
Zum Vergleich Deine Abfrage:

Code: Alles auswählen

SELECT

"AUS_TAB"."AUS_KTO",
"EIN_TAB"."EIN_SUMME" - "AUS_TAB"."AUS_SUMME" AS "Saldo"

FROM
( SELECT "AUS_KTO", SUM( "AUS_SUMME" ) AS "Ausgang_sum" FROM "AUS_TAB" GROUP BY "AUS_KTO" ) AS "AUS_TAB",
( SELECT "EIN_KTO", SUM( "EIN_SUMME" ) AS "Eingang_sum" FROM "EIN_TAB" GROUP BY "EIN_KTO" ) AS "EIN_TAB"

WHERE 

"EIN_TAB"."EIN_KTO" = "AUS_TAB"."AUS_KTO" 
Schau Dir mal bitte an, wo Du überall die Tabellennamen Aus_Tab und Ein_Tab verwendest ... daher der Syntaxfehler.
In den Unterselects fragst Du die Tabellen Ein_Tab und Aus_Tab ab und vergibst als Alias die gleichen Namen wie sie die Tabellen haben. Das führt zu einem Problem ...

Hoffe, ich konnte helfen.

Gruß Barlee
smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Beitrag von smoffice »

Sorry Barlee, javascript:emoticon(':lol:')
Laughing

ich denke jetzt nerv ich so langsam, aber das hat nicht funktioniert. ich habe Deine Ausführliche Variante reinkopiert und erhalte folgende Fehlermeldungjavascript:emoticon(':oops:')
Embarassed

SQL-Status: S0002
Fehler-Code: -22

Table not found in statement [SELECT "a"."Aus_Kto", "b"."Eingang_sum" - "a"."Ausgang_sum" AS "Saldo" FROM ( SELECT "Aus_Kto", SUM( "Aus_Summe" ) AS "Ausgang_sum" FROM "Aus_Tab" GROUP BY "Aus_Kto" ) AS "a", ( SELECT "Ein_Kto", SUM( "Ein_Summe" ) AS "Eingang_sum" FROM "Ein_Tab" GROUP BY "Ein_Kto" ) AS "b" WHERE "a"."Aus_Kto" = "b"."Ein_Kto"]

Ich habe auch noch nicht wirklich verstanden warum du a und b bei dem ersten select verwendest. deshalb dachte ich dass da meine Tabellennamen verwndet werden aber da erhalte ich den Fehler die Tabelle existieren nicht in der Datenbank javascript:emoticon(':cry:')
Crying or Very sad

Gruß Dieter
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Beitrag von Barlee »

Hallo Dieter,

nein, Du nervst nicht. Im Gegenteil. Ich möchte jetzt gerne mal wissen, wo es bei Dir hakt... das kriegen wir schon noch hin

Ich habe nochmals die Anweisung aus Deiner Fehlermeldung bei mir in die SQL Ansicht kopiert und konnte sie fehlerfrei ausführen. Daher vermute ich sehr stark, dass Deine Ausgangstabellen andere Bezeichnungen haben als in meiner Abfrage angenommen.
Nochmal zum Vergleich:

Deine Tabellen heißen Aus_Tab und Ein_Tab, richtig oder nicht?? Falls nicht, dann würde es einen solchen Fehler erklären und Du müsstest entweder die Tabellennamen oder die Abfrage entsprechend anpassen. BITTE AUCH AUF GROSS- UND KLEINSCHREIBUNG ACHTEN!!
Falls Deine Tabelle "aus_tab" heißt und Du fragst mit "Aus_Tab" ab, dann lässt sich der von Dir beschriebene Fehler reproduzieren.

Ich habe auch noch nicht wirklich verstanden warum du a und b bei dem ersten select verwendest.
Naja, das ist nicht schwer. Über die beiden SELECT-Anweisungen nach dem FROM bekomme ich bestimmte Erfgebnismengen in Form von zwei Tabellen zurück. Diese Ergebnistabellen möchte ich für eine weitere Abfrage (für das erste SELECT vor FROM) nutzen und vergebe für die beiden Tabellen jeweils einen Alias über den ich diese dann anspreche.
Beispiel. Ergebnistabelle "a" besitzt die Ausgabespalten "Aus_Kto"und "Ausgang_sum"
Ein "select a.Aus_Kto" heißt also: Wähle von der Ergebnistabelle a (den Alias habe ich ja selbst vergeben) die Spalte 'Aus_Kto'
Vergibst Du nun aber als Alias einen Namen von einer bestehenden Tabelle, dann hast Du plötzlich zwei gleichnamige Tabellen und eine Abfrage ist nicht eindeutig ...

Ein wenig klarer... ??

Gruß Barlee
smoffice
Beiträge: 7
Registriert: Di, 15.05.2007 10:16

Beitrag von smoffice »

Lieber Barlee,
vielen Dank ich habe was gelernt und das statement hat funktioniert.
:D
Gruß Dieter
Antworten