2016-07-27 29 views
0

My Kombinieren Vereinigung und Summe mit diffrent Spalte Sicht

Ich habe hier ansehen

Was will ich versuchen, ist die v_total_project sieht aus wie das zu machen. Ich versuche, habe diesen Code

select o.id_project AS id_project, 
sum((o.office_expense + m.misc_expense)) AS total_expense 
from v_office_project o inner join v_misc_project m on o.id_project = m.id_project 
group by o.id_project, m.id_project 

ich meinen Code nicht wissen, die v_misc_project.id_project drucken. Also habe ich versucht, die Union zu drucken, ID_project, und bekam Fehler unterschiedliche Anzahl der Spalte.

select o.id_project AS id_project 
from v_office_project o 
union 
select m.id_project as id_project, 
sum((o.office_expense + m.misc_expense)) AS total_expense 
from v_office_project o inner join v_misc_project m on o.id_project = m.id_project 
group by id_project 

Also, gibt es einen anderen Weg, das zu tun? Vielen Dank im Voraus,

+1

Fancy Formatierung behandelt werden muss, ist am besten für den Anwendungscode. SQL ist ungeschickt für solche. –

Antwort

1
SELECT 
    o.id_project AS id_project, 
    sum(
     o.office_expense + ifnull(m.misc_expense, 0) 
    ) AS total_expense 
FROM 
    v_office_project o 
LEFT JOIN v_misc_project m ON o.id_project = m.id_project 
GROUP BY 
    id_project 
UNION 
    SELECT 
     m.id_project AS id_project, 
     sum(
      ifnull(o.office_expense, 0) + m.misc_expense 
     ) AS total_expense 
    FROM 
     v_office_project o 
    RIGHT JOIN v_misc_project m ON o.id_project = m.id_project 
    GROUP BY 
     id_project 

In der ersten Auswahl Ihrer Vereinigung Sie vermissen das Feld für Ihre Ausgaben.

Auch die Verbindung fehlte, fügte hinzu. Verwenden Sie statt INNER JOIN einen LEFT oder RIGHT Join, sonst erhalten Sie nur Ergebnisse für id_project, die in beiden Tabellen sind.

Added ifnull() bei der Berechnung, weil die LEFT/RIGHT kann null verbindet zurückkehren, die als 0