我有这些结果:
PersonID SUM(PA.Total)
-------------------------
1 75
2 75
3 15
4 15
5 60
6 60
像这样的表:
PersonID Total
------------------
1 50
2 50
3 10
4 10
5 40
6 40
1 25
2 25
3 5
4 5
5 20
6 20
这些是按人分组的。现在我希望添加一个列,其中每个人的百分比是根据他们所有的总和计算得出的。
例如:总和是 300,因此我需要这样的结果:
PersonID SUM(PA.Total) Percentage
--------------------------------------
1 75 25%
2 75 25%
3 15 5%
4 15 5%
5 60 20%
6 60 20%
我在网上查看了代码,并想出了一个修复方法,例如:
SELECT
P.PersonID, SUM(PA.Total)
SUM(PA.Total) * 100 / [p] AS 'Percentage'
FROM
Person P
JOIN
Package PA ON P.PersonID = PA.PackageFK
CROSS JOIN
(SELECT SUM(PA.[Total]) AS [p]
FROM Package PA) t
GROUP BY
P.PersonID
但我不确定如何将交叉连接合并到连接以及已经组/总和部分。或者这是否完全正确。
任何帮助将不胜感激 - SQL fiddle http://sqlfiddle.com/#!9/80f91/2
原文由 Ryan Gadsdon 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不需要
cross join
。只需使用窗口函数:请注意,对于此查询,您不需要
JOIN
:SQL Server 进行整数除法。我使用十进制数字进行此类计算,因此它们更有意义。
这 是一个 SQL Fiddle,有两个变化: