2017-10-27 2 views
1

Ich möchte alle Datensätze aus zwei Tabellen erhalten, Berechnung der Summe der Menge nach Tag gruppiert, aber zeigt alle Datensätze aus beiden, wenn die Datumsmatch zeigt beide Werte an. Zum Beispiel habe ich:Wie kann ich alle Datensätze auswählen und die Übereinstimmung beider Tabellen erhalten in einem Datensatz

table 1 In 
id  ammount   date 
1   300    2017-10-25 
2   150    2017-10-25 
3   550    2017-10-27 


table 2 out 
1   250    2017-10-27 
2   410    2017-10-28 
3   830    2017-10-29 

und ich möchte dieses Ergebnis:

result 
ammount in   ammount out  date 
450     0     2017-10-25 
550     250    2017-10-27 
0     410    2017-10-28 
0     830    2017-10-29 

eine Ahnung, wie dies zu machen?

+1

Welche DBMS sind verwendest du? Orakel? SQL Server? PostgreSQL? MySQL? ... Markieren Sie immer SQL-Fragen mit dem DBMS, für das Sie eine Antwort wünschen. –

Antwort

1

Dies funktioniert mit SQLite3:

create table t1(id,amount,date); 
insert into t1 values 
(1,300,'2017-10-25'), 
(2,150,'2017-10-25'), 
(3,550,'2017-10-27'); 

create table t2(id,amount,date); 
insert into t2 values 
(1,250,'2017-10-27'), 
(2,410,'2017-10-28'), 
(3,830,'2017-10-29'); 

select sum(amount_in) as amount_in, sum(amount_out) as amount_out, date 
from (
    select amount as amount_in, 0 as amount_out, date from t1 
    union all 
    select 0 as amount_in, amount as amount_out, date from t2 
) 
group by date; 
+1

Gute Idee. Dies muss jedoch "UNION ALL" sein. Andernfalls würden Sie unfreiwillig Zeilen mit demselben Betrag am selben Tag entfernen. –

+0

Richtig du bist! Korrigiert. – tonypdmtr

+0

yeah danke, es funktioniert, muss nur einen Alias ​​auf main auswählen und funktioniert gut, wirklich danke –

0

, dass eine vollständige äußere auf den beiden aggregierten Tabellen verbinden ist:

select 
    coalesce(tin.ammount, 0) as ammount_in, 
    coalesce(tout.ammount, 0) as ammount_out, 
    date 
from   (select date, sum(ammount) as total from table_in group by date) tin 
full outer join (select date, sum(ammount) as total from table_out group by date) tout 
    using (date); 
0

Dies ist Arbeiten in MS SQL Server

SELECT  SUM(amount_in) AS amount_in, SUM(amount_out) AS amount_out, date1 
FROM   (SELECT  amount AS amount_in, 0 AS amount_out, date1 
        FROM   t1 
        UNION ALL 
        SELECT  0 AS amount_in, amount AS amount_out, date1 
        FROM   t2) AS derivedtbl_1 
GROUP BY date1 
Verwandte Themen