mehrere Tabellen zusammenfügen und Werte addieren

SourceCoder

Lt. Commander
Registriert
Apr. 2012
Beiträge
1.563
Schönen guten Tag zusammen,

ich habe drei Tabellen die ich gern zusammen aufgegeben haben möchte. Ich habe mir zu Thema SQL/JOIN angeschaut leider verstehe ich es nicht ganz, vielleicht verstehe ich das besser wenn man es mir an meinem Problem erklärt.

Deswegen hoffe ich auf Erklärung mit sehr hilfreichen Kommentaren. Hier meine Situation -->

Beispiel 1 Tabelle:

Name Kontonummer Wert1 Wert2 Wert3
MAX 1 50,0 0,0 0,0
Joko 2 60,0 0,0 0,0



Beispiel 2 Tabelle:

Name Kontonummer Wert1 Wert2 Wert3
Max 1 0,0 10,0 0,0
Big 3 0,0 10,0 0,0


Beispiel 3 Tabelle(offen):

Name Kontonummer Wert1 Wert2 Wert2
Max 1 0,0 0,0 40,0
Joko 2 0,0 0,0 60,0
Flop 4 0,0 0,0 30,0


Ergebnis das ich am ende, gern hätte:

Name Kontonummer Wert1 Wert2 Wert3
MAX 1 50,0 10,0 40,0
Joko 2 60,0 0,0 60,0
Big 3 0,0 10,0 0,0
Flop 4 0,0 0,0 30,0
 
Zuletzt bearbeitet:
Lies Dir bitte Deinen Beitrag nochmal durch und überlege, ob Du Dein Problem verständlich dargestellt hast.
 
Ich weiß zwar nicht welche Datenbank, aber in MySQL sollte es so ungefähr aussehen:

edit: Freezedevil Lösung ist korrekt
 
Zuletzt bearbeitet:
Ein Join ist meiner Meinung nach an dieser Stelle nicht wirklich angebracht. Die Beschreibung der Tabellen ist vollkommen identisch, weshalb zunächst eine Vereinigung bilden sollte. Darauf gruppiert man über die Kontonummern um für jedes Konto die Summe der einzelnen Werte zu ermitteln.

http://sqlfiddle.com/#!2/a56db6/17

Edit: Bei nem inner Join fliegen ja die Tupel raus, die keinen Verbundpartner haben. Man findet sicher nen passenden Join, muss sich dann aber wieder irgendwie mit NULL-Werten rumschlagen.
 
Zuletzt bearbeitet:
Ist doch ein einfacher Union den du aufsummierst.
Tabelle eins erzeugen
Code:
CREATE TABLE `t1` (
	`name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`w1` INT(11) NULL DEFAULT NULL,
	`w2` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Tabelle zwei erzeugen
Code:
CREATE TABLE `t2` (
	`name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci',
	`w1` INT(11) NULL DEFAULT NULL,
	`w2` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Und die Abfrage:
Code:
select name, sum(w1), sum(w2) from 
((select name, w1, w2 from t1)
union
(select name, w1, w2  from t2)) as uni
group by name
Nicht wirklich performant, aber geht.
Willst du das operativ nutzen würde ich die Tabellen einmalig zusammen führen und nurnoch mit einer arbeiten.
 
Zurück
Oben