2017-07-07 17 views
0

3つのクエリを1つのクエリで結合してグラフテーブルで表現する必要があります。 NetAmount20171つのクエリで3つのテーブルを組み合わせるには

​​

第二問合せ:

第一クエリは、第二のクエリは、予算を見つけることですNetAmount2017 を検索することである(2017) 第三クエリはNetAmount2016

に第一クエリを探すことです。 Budget2017

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 

第三クエリ:NetAmount2016(第一クエリと同じですが、異なる日付)

私は2つのクエリのみを組み合わせることができますが、3つのクエリを組み合わせることはできません。ここにbudget2017とnetamount2017の組み合わせがあります。

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 

結果は、Netamount2017、Budget2017、Netamount2016の3つの棒グラフからなる1つのグラフに表示する必要があります。下の写真は結果を示していますが、2017年の予算は1月のみ表示され、1月から4月の中から選択した月は表示されません。これは3つのクエリを結合するためのこれまでのクエリです

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 

Wrong

+0

uはあなたが 'union'を試してみる –

+0

あなたのテーブル構造を投稿することができます:ここで はコードがありますか? –

+0

決して使ってみることはできません。 –

答えて

0

神に感謝!私はすべてのクエリを1つのクエリに結合する答えを見つけました。

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 

Here is the final result

関連する問題