2016-07-27 48 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。