1

各地で販売されているダイヤモンドストーンについて、以下の情報があります。

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合計して、すべての地域の販売率を計算する必要があります。CutColorSold 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回の選択でこれを実現するためのより良い方法があるはずです。

誰か助けてもらえますか?

4

2 に答える 2

1

行 1 で SoldQty と TotalSold が異なるのはどうしてですか? それは私には間違いのようです。これはどう:

http://www.sqlfiddle.com/#!6/0f5fe/24

select region,cut,color, soldqty, cast(soldqty as varchar) +'/' + cast(regiontotal as varchar) PercentSold FROM (
  select region,cut,color, sum(soldqty) soldqty, regiontotal from (
    select soldqty, region,cut,color,sum(soldqty) over (partition by region) as regiontotal
    from sale
  ) b
  group by region,cut,color, regiontotal
)foo
于 2012-12-28T21:52:24.580 に答える
0

これは、主キー (または既知の候補キー) が役立つ例です。構造を次のように変更した場合:

Region Cut Color SoldQty   

ID Region Cut Color SoldQty   

IDで検索できるようになりました。これにより、これを行うこともできます:

select Region,Cut,Color, sum(SoldQty), 
'TotalSoldQty' =  Sum (SoldQty) OVER(PARTITION BY Region) 

一時テーブルは生成されません。

于 2012-12-28T21:26:22.687 に答える