2017-06-20 55 views
0

我有2个问题。第一个是找到netamount,第二个是预算总和。我需要显示结果,包括来自差异表的商店名称和商店编号。如何合并差异表中的2个查询

这是我找到总netamount第一次查询:

SELECT sum(a.netamt) as netamt, b.store_name 
    FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 

    WHERE a.busidate >= '2017-01-01' AND a.busidate <='2017-04-30' 
    GROUP BY a.storenum 

第二届查询是找到总预算

SELECT 

SUM(CASE WHEN c.busidate BETWEEN '2017-01' AND '2017-04' THEN c.budget ELSE 0 END) as budget, 
b.store_name 
FROM site_kpimthslsbgt c JOIN site_store b ON b.storenum = c.storenum 
GROUP BY c.storenum 

我需要这个查询的两个结合。输出的结果应该是 like this

+0

后输出为好。 –

回答

0

尝试,这也需要忍受连接条件到底是否有你的个人查询获取多个记录:

Select x.netamt, y.budget, y.store_name 
from 
(
SELECT sum(a.netamt) as netamt, b.store_name 
FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
WHERE a.busidate >= '2017-01-01' AND a.busidate <='2017-04-30' 
GROUP BY a.storenum 
) x 
inner join 
(
SELECT 
SUM(CASE WHEN c.busidate BETWEEN '2017-01' AND '2017-04' THEN c.budget ELSE 0 END) as budget, 
b.store_name 
FROM site_kpimthslsbgt c JOIN site_store b ON b.storenum = c.storenum 
GROUP BY c.storenum 
) y 
on x.store_name = y.store_name 
+0

谢谢你这么多。这个查询给出了这两个表的完美计算。谢谢 –

0
SELECT sum(a.netamt) as netamt,SUM(CASE WHEN c.busidate BETWEEN '2017-01' AND '2017-04' THEN c.budget ELSE 0 END) as budget,b.store_name 
FROM site_store b 
JOIN site_kpimthslsbgt c ON b.storenum = c.storenum 
JOIN site_sales a ON b.storenum = a.storenum 
GROUP BY b.storenum 

试试上面的查询。

希望这会帮助你。

+0

我试过这个查询,它给出了结果,但对于netamount和预算都是错误的计算。 –

0

我认为这里有4种可能的情况,有销售和预算的商店,有销售但没有预算的商店,有预算但没有销售的商店,没有销售和预算的商店。

鉴于

DROP TABLE IF EXISTS site_sales,site_budget; 
CREATE TABLE site_sales(ID INT auto_increment primary key, site_id int, busidate date,amt int); 

create table site_budget(ID INT auto_increment primary key, site_id int, busidate date,amt int); 

insert into site_sales (site_id,busidate,amt) values 
(1,'2017-04-01',10),(1,'2017-04-01',20), 
(2,'2017-04-01',10); 

insert into site_budget (site_id,busidate,amt) values 
(1,'2017-04-01',200), 
(3,'2017-04-01',100); 

这个查询

SELECT b.name, 
     sum(case when a.busidate between '2017-01-01' and '2017-04-30' then a.amt else 0 end) as netamt, 
     ifnull((select SUM(CASE WHEN c.busidate BETWEEN '2017-01-01' AND '2017-04-30' THEN c.amt ELSE 0 END) from site_budget c where b.id = c.site_id),0) as budget 
FROM sites b 
left JOIN site_sales a ON b.id = a.site_id 
GROUP BY b.id 

结果各个查询的

+--------+--------+--------+ 
| name | netamt | budget | 
+--------+--------+--------+ 
| Store1 |  30 | 200 | 
| Store2 |  10 |  0 | 
| Store3 |  0 | 100 | 
| Store4 |  0 |  0 | 
+--------+--------+--------+ 
4 rows in set (0.00 sec) 
+0

谢谢这么多!您的查询也完美地工作。它给出正确的计算netamount和预算遵循它的商店名称。 :) –