如何按员工汇总指定行号范围的百分比总和?
问题描述
我有一组包含Employee(员工)、Line#(行号)和Pct(百分比)字段的数据集,单个员工可能对应5行、4行等不同数量的百分比数据。我需要按指定行号范围(如1至5、1至4等)对每个员工的Pct进行汇总,但目前的SQL只能单独汇总某一行号的Pct,无法实现行号范围内的整体汇总。
数据集示例
| Employee | Line# | Pct |
|---|---|---|
| 1234 | 1 | 10 |
| 1234 | 2 | 40 |
| 1234 | 3 | 50 |
| 1235 | 1 | 50 |
| 1235 | 2 | 30 |
预期结果
- Employee 1234的Pct汇总值为100
- Employee 1235的Pct汇总值为80
当前使用的SQL代码
SELECT EMPLOYEE, LINE_NBR,SUM(PLAN_PCT) FROM dbo.EmpPct WHERE EMPLOYEE= 1234 GROUP BY LINE_NBR, EMPLOYEE ORDER BY SUM(PLAN_PCT) DESC
请问如何修改代码以实现按员工及指定行号范围汇总Pct总和?
解决方案
要实现按员工和指定行号范围汇总Pct总和,只需调整SQL的过滤条件与分组逻辑:
- 添加行号范围过滤:在
WHERE子句中用BETWEEN指定行号的上下限,筛选出需要汇总的行数据。 - 调整分组字段:仅按
EMPLOYEE分组,不要包含LINE_NBR,确保同一员工的符合条件的Pct被合并计算。 - 精简返回字段:SELECT列表移除
LINE_NBR,只保留员工ID和汇总后的百分比总和。
修改后的SQL代码(以行号1-3为例):
SELECT EMPLOYEE, SUM(PLAN_PCT) AS Total_Pct FROM dbo.EmpPct WHERE LINE_NBR BETWEEN 1 AND 3 -- 按需修改行号范围 GROUP BY EMPLOYEE ORDER BY Total_Pct DESC
- 若需要汇总其他行号范围,直接修改
BETWEEN后的数值即可(比如1-4就改成LINE_NBR BETWEEN 1 AND 4)。 - 若不需要限制行号范围,直接删除
WHERE LINE_NBR BETWEEN ...这一行,即可汇总每个员工的所有Pct数据。
内容的提问来源于stack exchange,提问作者Shaji
相关产品推荐
相关产品推荐

