2017-06-14 3 views
1

Ich habe 2 Tabellen mit Informationen: ID, persona_id, total_amount Die Persona ID kann dutzende Male wiederholt werden. So bekomme ich die alle eine Personen-ID TOTAL_AMOUNT mit query:Daten aus 2 Tabellen und Summierungswerte des Ergebnisses erhalten

select d.id as debt_id, p.name as persona, sum(d.total_amount) as total_amount 
from debt d 
    join persons p on d.persona_id = p.id group by p.name 

Ich möchte Daten aus jeder Tabelle in einer Abfrage erhalten und aritmethic propertys mit der TOTAL_AMOUNT Spalte zu tun und senden Sie es als 1 Tabel. (-, +, /, *) der Gesamtbetrag Spalten die zwei Tabellen erhalten comined mit Rechenoperation

TABELLE 1

id persons_id total_amount 
1 2   50 
2 3   100 
3 2   200 
4 5   300 
5 1   500 

TABELLE 2

id persons_id total_amount 
1 2   25 
2 1   100 
3 5   50 
4 3   100 
5 4   300 

Als Ergebnis will ich. Basically eine Änderung, um den Endbetrag des Ergebnisses in der Form zu erhalten, die ich für verschiedene Fälle wünsche.

Was für mich gearbeitet basierend auf JohnHC answear war:

select c.id, c.persona_id, c.total_amount - d.total_amount as new_total 

from (   select c.id , c.persona_id, sum(c.total_amount) as total_amount from credit c 
       join persons p on c.persona_id = p.id 
       group by p.name) c 
inner join ( select d.id, d.persona_id, sum(d.total_amount) as total_amount from debt d 
       join persons p on d.persona_id = p.id 
       group by p.name) d 

on c.persona_id = d.persona_id 
group by c.id, c.persona_id 
+0

Erste Frage Ich denke, sollte sein "Warum haben Sie 2 Tabellen mit genau der gleichen Struktur?" – RiggsFolly

+0

@RiggsFolly Da die dargestellte Struktur nicht mit der Abfrage übereinstimmt, gehe ich davon aus, dass das OP einige Informationen ausblendet, um es "leichter für uns" zu lesen. Wir können sogar 3 verschiedene Tische haben. –

+0

Ich habe 2 Tische mit exakt gleicher Struktur aber hält in einer Tabelle hält Menge von Holz am Standort a abgeholt, aber andere hält Kohle Menge vor Ort b aber Person, die den Job kann das gleiche an beiden Standorten sein. Myb das Problem besteht darin, Informationen in 2 Tabellen zu teilen? –

Antwort

1

Wenn Sie die Gesamt wollen, versuchen Sie:

select id, person_id, sum(total_amount) 
from 
(
select id, person_id, total_amount 
from table1 
union all 
select id, person_id, total_amount 
from table2 
) 
group by id, person_id 

Wenn Sie andere Dinge tun wollen, versuchen:

select t1.id, t1.person_id, t1.total_amount [+ -/*] t2.total_amount as new_total 
from table1 t1 
inner join table2 t2 
on t1.id = t2.person_id 
group by t1.id, t1.person_id 
+0

Vielen Dank für die Hilfe nach ein paar Minuten mit Ihrer Answers herumspielen ich schaffte es zu bekommen, was ich wollte. Ich habe den Beitrag mit der Lösung aktualisiert, die mir geholfen hat, Daten in der von mir gewünschten Form zu erhalten. –

Verwandte Themen