2016-07-27 17 views
0

My は、私が見るにはこちらを</p> <p>私が試してみたい何<code>v_total_project</code>がそのように見えるようにすることである必要がありビュー

の切り抜いたコラムで労働組合との和を結合します。 私は私のコードはv_misc_project.id_projectを印刷しないことを知っている

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 

このコードを試してきました。だから、私は両方のid_projectを印刷する連合を試み、エラーの異なる数の列を得ました。

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 

これを行う別の方法はありますか?事前に おかげで、あなたの労働組合の最初の選択で

+1

ファンシーフォーマットが最良のあなたのアプリケーションコードに任されているとして扱われるように持っている、nullを返すことができます参加しているため。 SQLはそのような場合には不便です。 –

答えて

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 

あなたはあなたの費用のためのフィールドが欠落しています。

また、参加が見つかりませんでした。 INNER JOINの代わりにLEFTまたはRIGHT Joinを使用してください。そうしないと、両方の表にあるid_projectの結果しか得られません。計算に追加ifnull()

LEFT/RIGHTは0

関連する問題

 関連する問題