Sql server 编写脚本的更好方法
我有以下关于在不同地区销售的钻石的信息 Temp1Sql 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 根据
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是如何不同的?我觉得这是个错误。这个怎么样: