我有两个查询,它们给出两个diff结果,两个结果表都有一个公共列,我想将它们合并,并且有一个结果表将公共列合并为一列
这是我的查询
query1= select b.CUSTOMERDESCRIPTOR as outlet,sum(a.netamount) as amount from syncbill a, ecustomer b where a.outlet=b.CUSTOMERIDENTIFIER and a.cancelled<>'Y' and year(curdate())=year(a.billdate) and month(curdate())=month(a.billdate) group by a.OUTLET;
query2= select b.CUSTOMERDESCRIPTOR as outlet,sum(a.netamount) as amount from syncbill a, ecustomer b where a.outlet=b.CUSTOMERIDENTIFIER and a.cancelled<>'Y' and year(curdate())=year(a.billdate) group by a.OUTLET;
第一个查询是给我这样的结果
第二个查询给我的结果是
[
现在我要合并这两个查询以获得这样的结果
我尝试了合并,但是它重复了数据并仅显示两列的表。 请任何在那里有Mysql知识的人指导我如何实现这一目标
答案 0 :(得分:1)
请在下面的查询中运行,您一次将获得两列
SELECT b.customerdescriptor AS outlet,
Sum(a.netamount) AS currentYearAmount,
Sum(CASE
WHEN Month(Curdate()) = Month(a.billdate) THEN a.netamount
ELSE 0
end) AS CurrentMonth
FROM syncbill a,
ecustomer b
WHERE a.outlet = b.customeridentifier
AND a.cancelled <> 'Y'
AND Year(Curdate()) = Year(a.billdate)
GROUP BY a.outlet;
答案 1 :(得分:1)
Union
是您所需要的
select
b.CUSTOMERDESCRIPTOR as outlet,
sum(a.netamount) as amount
from
syncbill a
Inner Join ecustomer b on a.outlet = b.CUSTOMERIDENTIFIER
where
a.cancelled<>'Y' and
year(curdate())=year(a.billdate) and
month(curdate())=month(a.billdate)
group by
a.OUTLET;
Union
select
b.CUSTOMERDESCRIPTOR as outlet,
sum(a.netamount) as amount
from
syncbill a,
Inner Join ecustomer b on a.outlet=b.CUSTOMERIDENTIFIER
where
a.cancelled<>'Y' and
year(curdate())=year(a.billdate)
group by
a.OUTLET;
请勿使用Implicit Join
,而应使用Comma
。 Join
不好,如果您不知道Join
的工作方式,那么结果会很混乱。
但是为简单起见,您可以尝试:
select
b.CUSTOMERDESCRIPTOR as outlet,
sum(case when month(curdate())=month(a.billdate) then a.netamount else 0 end) as monthAmount,
sum(case when year(curdate())=year(a.billdate) then a.netamount else 0 end) as yearAmount
from
syncbill a
Inner Join ecustomer b on a.outlet = b.CUSTOMERIDENTIFIER
where
a.cancelled<>'Y'
group by
a.OUTLET;
我建议不要将a
或b
用作别名表。为什么不给sb
赋予syncbill
并给{{ 1}} ..会说得通..