我对 SQL 还是个新手,对此有点困惑。我将不胜感激任何帮助或建议。我有一个包含值列和 ID 列的表,然后按值列降序排列。即:
Value | ID
12 | A
09 | A
08 | B
08 | C
07 | A
06 | B
03 | B
01 | C
我正在尝试做两件事:
- 对于每一行,计算其各自 ID 占总和的百分比。第 1 行为 12/(12+9+7),第 2 行:3/(12+9+7),第 3 行:8/(8+6+3),等等。
- 计算每个 ID 在 (1) 中计算的百分比的运行总和。本质上只是每个 ID 的累加和。
输出看起来像这样。
Value | ID | UnitValue | RunningTotal
-------------------------------------
12 | A | 0.43 | 0.43
09 | A | 0.32 | 0.75
08 | B | 0.47 | 0.47
08 | C | 0.89 | 0.89
07 | A | 0.25 | 1.00
06 | B | 0.35 | 0.82
03 | B | 0.18 | 1.00
01 | C | 0.11 | 1.00
最佳答案
对于 SQL Server 2008
;WITH CTE
AS
(
SELECT
Value
,ID
,CONVERT(DECIMAL(10,2),Value/CONVERT(DECIMAL(10,2),SUM(Value) OVER(PARTITION BY [ID]))) AS [Unit Value]
FROM
Table1
)
SELECT a.Value,a.ID,a.[Unit Value], (SELECT SUM(b.[Unit Value])
FROM CTE b
WHERE a.ID = b.ID AND b.[Unit Value] <= a.[Unit Value]) AS [RunningTotal]
FROM CTE a
ORDER BY a.ID,[RunningTotal]
关于SQL单位值和按组累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117369/