如何联接两个查询以在单个查询中获得结果

时间:2019-03-05 09:42:52

标签: sql mysql-5.5

我有两个查询。从第一个查询中获取选定的年份和月份数据,从第二个查询中获取上一年的数据,即上一年的数据

查询1: SELECT sum(a.netamount) NETAMOUNT,e.CUSTOMERDESCRIPTOR,YEAR(BILLDATE) AS DATEYEAR, MONTH (BILLDATE) DATEMONTH FROM syncbill a,ecustomer e WHERE a.OUTLET=e.CUSTOMERIDENTIFIER and YEAR(BILLDATE) = '2018' AND MONTH(BILLDATE) = '09' group by outlet

查询2: SELECT sum(a.netamount) NETAMOUNT,e.CUSTOMERDESCRIPTOR,YEAR(BILLDATE) AS DATEYEAR, MONTH (BILLDATE) DATEMONTH FROM syncbill a,ecustomer e WHERE a.OUTLET=e.CUSTOMERIDENTIFIER and YEAR(BILLDATE) = '2018-1' AND MONTH(BILLDATE) = '09' group by outlet

我正在使用MySQL 5.5,并在Year-1中获取上一年的数据 如2018-1给出了2017。

除了查询1年中的年份为2018和查询2年中的年份为2018-1 i.e 2017之外,这两个查询之间的其他所有条件都是相同的。

所以我想同时加入两个查询,以便一次运行即可获取数据。

query1 result

query2 result

因为2017年没有数据,这就是为什么它显示为空白,但是我想显示为0。

This what I am trying to achieve

我知道我可以通过join来做到这一点,但是经验很少。

1 个答案:

答案 0 :(得分:0)

default:
    CallSomeFunction();

如果要两行分开,则可以使用union all

UNION ALL总是同时返回两个行结果

您还可以按年份使用一个查询组

SELECT sum(a.netamount) NETAMOUNT
,e.CUSTOMERDESCRIPTOR
,YEAR(BILLDATE) AS DATEYEAR
, MONTH (BILLDATE) DATEMONTH 
FROM syncbill a 
INNER JOIN ecustomer e ON a.OUTLET=e.CUSTOMERIDENTIFIER  
    and YEAR(BILLDATE) = '2018' AND MONTH(BILLDATE) = '09' 
group by outlet

UNION ALL

SELECT sum(a.netamount) NETAMOUNT
,e.CUSTOMERDESCRIPTOR,
YEAR(BILLDATE) AS DATEYEAR
, MONTH (BILLDATE) DATEMONTH 
FROM syncbill a
INNER JOIN ecustomer e ON  a.OUTLET=e.CUSTOMERIDENTIFIER 
    and YEAR(BILLDATE) = '2018-1' AND MONTH(BILLDATE) = '09' 
group by outlet