Sql server 编写脚本的更好方法

Sql server 编写脚本的更好方法,sql-server,tsql,Sql Server,Tsql,我有以下关于在不同地区销售的钻石的信息 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 根据

我有以下关于在不同地区销售的钻石的信息

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
根据以上内容,我需要在SQLServer2005中获得以下信息。基本上,对于
区域
切割
颜色
的独特组合,我需要对每个区域的
销售数量
进行汇总,并计算销售百分比

所需的最终产出

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,如下所示,以获得最终的表

select 
    Region, Cut, Color,SoldQty, TotalSOld,  
    'PercentageSoldQty' = case when TotalSold = 0 then 0 
                               else (SoldQty *100/TotalSold)  end
from temp2
上面给出了结果,但我确信,在一次选择中一定有比使用多个临时表更好的方法来实现这一点


有人能帮忙吗?

这是一个主键(或我相信大家都知道的候选键)派上用场的例子。如果从以下位置修改结构:

Region Cut Color SoldQty   

您现在可以通过ID进行查找。这也使您能够执行以下操作:

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

没有生成任何临时表。

这是一个主键(或我认为已知的候选键)派上用场的实例。如果从以下位置修改结构:

Region Cut Color SoldQty   

您现在可以通过ID进行查找。这也使您能够执行以下操作:

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

没有生成任何临时表。

第1行的SoldQty和TotalSeld如何不同?我觉得这是个错误。这个怎么样:


第一行SoldQty和TOTALSELD是如何不同的?我觉得这是个错误。这个怎么样: