Php 如何在一个查询中组合3个表

Php 如何在一个查询中组合3个表,php,mysql,Php,Mysql,我需要在一个查询中组合3个元素,以便在图形表中表示它 第一个查询是查找NetAmount2017 第二个查询是查找2017年预算 第三个查询是查找NetAmount2016 第一个查询:NetAmount2017 SELECT sum(a.netamt) as netamt2017, b.store_name FROM site_sales a JOIN site_store b ON b.storenum = a.storenum WHERE a.busidate >= '2017-

我需要在一个查询中组合3个元素,以便在图形表中表示它

第一个查询是查找NetAmount2017 第二个查询是查找2017年预算 第三个查询是查找NetAmount2016

第一个查询:NetAmount2017

SELECT sum(a.netamt) as netamt2017, 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
第三次查询:NetAmount2016与第一次查询相同,但日期不同

SELECT sum(a.netamt) as netamt2017, b.store_name 
FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
WHERE a.busidate >= '2016-01-01' AND a.busidate <='2016-04-30'
GROUP BY a.storenum
如果我这样做下面的查询,如果给我错误的计算

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

感谢上帝!我找到了答案,将我所有的查询合并成一个查询。 代码如下:

 SELECT x.netamt2017,z.netamt2016, y.budget, y.store_name
 FROM
 (
 SELECT sum(a.netamt) as netamt2017, b.store_name 
 FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
 WHERE a.busidate >= '$date1' AND a.busidate <='$date2' AND 
 a.storenum='$storenum'
 GROUP BY a.storenum
 ) x

 inner join
 (
 SELECT
 SUM(CASE WHEN c.busidate BETWEEN '$date111' AND '$date211' THEN c.budget 
 ELSE 0 END) as budget,
 b.store_name
 FROM site_kpimthslsbgt c JOIN site_store b ON b.storenum = c.storenum 
 WHERE c.storenum='$storenum'
 GROUP BY c.storenum
 ) y
 on x.store_name = y.store_name
 INNER JOIN
 (
 SELECT sum(a.netamt) as netamt2016, b.store_name 
 FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
 WHERE a.busidate >= '$date1234' AND a.busidate <='$date2234' AND 
 a.storenum='$storenum'
 GROUP BY a.storenum
 ) z
 on y.store_name = z.store_name

你能发布你的表格结构吗?你试过union吗?永远不要尝试,也不知道如何使用它
SELECT
SUM(CASE WHEN a.busidate BETWEEN '2016-01-01' AND '2016-04-30' THEN a.netamt 
ELSE 0 END) as netamt2016,
SUM(CASE WHEN a.busidate BETWEEN '2017-01-01' AND '2017-04-30' THEN a.netamt ELSE 0 
END) as netamt,
b.store_name,
c.budget
FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
JOIN site_kpimthslsbgt c ON b.storenum = c.storenum 
WHERE c.busidate = '2017-01' AND b.store_region='$store_region'
GROUP BY a.storenum
SELECT
SUM(CASE WHEN a.busidate BETWEEN '2016-01-01' AND '2016-04-30' THEN a.netamt 
ELSE 0 END) as netamt2016,
SUM(CASE WHEN a.busidate BETWEEN '2017-01-01' AND '2017-04-30' THEN a.netamt ELSE 0 
END) as netamt,
b.store_name,
c.budget
FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
JOIN site_kpimthslsbgt c ON b.storenum = c.storenum 
WHERE c.busidate BETWEEN '2017-01' AND '2017-04' AND b.store_region='$store_region'
GROUP BY a.storenum
 SELECT x.netamt2017,z.netamt2016, y.budget, y.store_name
 FROM
 (
 SELECT sum(a.netamt) as netamt2017, b.store_name 
 FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
 WHERE a.busidate >= '$date1' AND a.busidate <='$date2' AND 
 a.storenum='$storenum'
 GROUP BY a.storenum
 ) x

 inner join
 (
 SELECT
 SUM(CASE WHEN c.busidate BETWEEN '$date111' AND '$date211' THEN c.budget 
 ELSE 0 END) as budget,
 b.store_name
 FROM site_kpimthslsbgt c JOIN site_store b ON b.storenum = c.storenum 
 WHERE c.storenum='$storenum'
 GROUP BY c.storenum
 ) y
 on x.store_name = y.store_name
 INNER JOIN
 (
 SELECT sum(a.netamt) as netamt2016, b.store_name 
 FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
 WHERE a.busidate >= '$date1234' AND a.busidate <='$date2234' AND 
 a.storenum='$storenum'
 GROUP BY a.storenum
 ) z
 on y.store_name = z.store_name