いくつかのSQLをブラッシュアップします。売上高を2005年から2008年に集計して顧客リストを作成しようとしていますが、以前の(2005-2007)の売上高はまだ2008年には売りませんでした。集計売上:過去の販売実績のある顧客を表示します。
私は2つのクエリを作成しました...どちらがより効果的かはわかりませんが、where句を正しく実装する方法を理解しているようです。
ご協力いただければ幸いです。
クエリ1:
select r.ResellerName,
(select sum(rs.SalesAmount) from FactResellerSales rs
where rs.ResellerKey = r.ResellerKey
and rs.OrderDateKey >=20050101 and rs.OrderDateKey <20060101) '2005',
(select sum(rs.SalesAmount) from FactResellerSales rs
where rs.ResellerKey = r.ResellerKey
and rs.OrderDateKey >=20060101 and rs.OrderDateKey <20070101) '2006',
(select sum(rs.SalesAmount) from FactResellerSales rs
where rs.ResellerKey = r.ResellerKey
and rs.OrderDateKey >=20070101 and rs.OrderDateKey <20080101) '2007',
(select sum(rs.SalesAmount) from FactResellerSales rs
where rs.ResellerKey = r.ResellerKey
and rs.OrderDateKey >=20080101 and rs.OrderDateKey <20090101) '2008'
From DimReseller r
order by r.ResellerName ASC
クエリ2:
Select r.ResellerName,
SUM(case when OrderDateKey>=20050101 and OrderDateKey<20060101 then rs.SalesAmount else 0 end) '2005',
SUM(case when OrderDateKey>=20060101 and OrderDateKey<20070101 then rs.SalesAmount else 0 end) '2006',
SUM(case when OrderDateKey>=20070101 and OrderDateKey<20080101 then rs.SalesAmount else 0 end) '2007',
SUM(case when OrderDateKey>=20080101 and OrderDateKey<20090101 then rs.SalesAmount else 0 end) '2008'
from DimReseller r
inner join FactResellerSales rs on rs.ResellerKey = r.ResellerKey
Group by r.ResellerName
Order by ResellerName ASC
'2008' = 0は常に偽になります。このクエリではレコードは返されません。文字列 '2008'が0に等しいかどうかチェックしています。これを行うには、一重引用符を削除します。 – Jeffrey
年、私は2008年= 0と '2008' = 0を無駄にしようとしました... – user3221111
ジェフリー、あなたの助けをありがとう、あなたの質問が私が欲しかったことをやっているかどうかわからない(私はそれをリバースエンジニアリングしていた)...最終的には2008年の売上がない顧客を示したいと思っていましたが、前年度の売上は – user3221111