2016-07-27 46 views
0

My 聯合工會與和具有視

不同勢列我這裏查看

我想嘗試就是讓v_total_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 

我知道我的代碼將不打印v_misc_project.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

別緻的格式最好是留給你的應用程序代碼。 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使用LEFTRIGHT Join,否則您只會得到id_project的結果,它們都在兩個表中。

添加在計算ifnull(),因爲LEFT/RIGHT加入可以返回null,其被視爲0。