2017-06-20 11 views
0

2つのクエリがあります。 1位はネットマウントを、2位は予算の合計です。私は違いのテーブルからの店名と店舗番号を含む結果を表示する必要があります。ここで差分テーブルの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と予算の両方に対して正しい計算を行い、ストア名に従います。 :) –

関連する問題