我有以下有关各地区销售的钻石的信息。
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
的唯一组合,我需要{{1}总结并计算出每个地区的销售额百分比。
需要最终输出
Sold Qty
为了实现这个目的,我使用了2-3个临时表 - 如下所示。
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
这会给表格temp2如下。
select
Region, Cut, Color,
sum(SoldQty),
'TotalSoldQty' = Sum (SoldQty) OVER(PARTITION BY Region)
into temp2
from temp1
group by Region, Cut, Color
然后我添加了另一个选择,如下所示进入决赛桌。
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
上面给出了结果,但我确信,在单个选择中必须有一个更好的方法来实现这个,而不是使用多个临时表。
有人可以帮忙吗?
答案 0 :(得分: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
答案 1 :(得分:0)
这是一个实例,其中主键(或我认为已知的候选键)派上用场。如果您修改结构:
Region Cut Color SoldQty
到
ID Region Cut Color SoldQty
您现在可以按ID查找。这也使你能够做到这一点:
select Region,Cut,Color, sum(SoldQty),
'TotalSoldQty' = Sum (SoldQty) OVER(PARTITION BY Region)
没有生成任何临时表。