各地で販売されているダイヤモンドストーンについて、以下の情報があります。
Temp1
Region Cut Color SoldQty
------- -- ----- -------
01 RD C 1
01 RD A 1
01 RD C 3
01 BA C 2
02 RD A 2
02 BA A 3
02 BA B 0
02 BA A 1
上記から、SQL Server 2005で次の情報を取得する必要があります。基本的に、との一意の組み合わせについては、Region
合計して、すべての地域の販売率を計算する必要があります。Cut
Color
Sold Qty
最終出力が必要
Region Cut Color SoldQty TotalSOld %SOld
------- -- ----- ------- --------- -----
01 RD C 1 4 4/7
01 RD A 1 1 1/7
01 BA C 2 2 2/7
02 RD A 2 2 2/6
02 BA A 4 4 4/6
02 BA B 0 0 0
これを達成するために、次のように2〜3個の一時テーブルを使用しました。
select
Region, Cut, Color,
sum(SoldQty),
'TotalSoldQty' = Sum (SoldQty) OVER(PARTITION BY Region)
into temp2
from temp1
group by Region, Cut, Color
これにより、テーブルtemp2は次のようになります。
Region Cut Color SoldQty TotalSOld
------- -- ----- ------- ---------
01 RD C 1 4
01 RD A 1 1
01 BA C 2 2
02 RD A 2 2
02 BA A 4 4
02 BA B 0 0
次に、ファイナルテーブルを取得するために、以下のように別の選択を追加しました。
select
Region, Cut, Color,SoldQty, TotalSOld,
'PercentageSoldQty' = case when TotalSold = 0 then 0
else (SoldQty *100/TotalSold) end
from temp2
上記の結果が得られますが、複数の一時テーブルを使用するよりも、1回の選択でこれを実現するためのより良い方法があるはずです。
誰か助けてもらえますか?