1

我有以下关于在各个地区销售的钻石的信息。

温度1

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

以上给了我结果,但我敢肯定,与使用多个临时表相比,在单个选择中必须有更好的方法来完成此操作。

任何人都可以帮忙吗?

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 回答