【发布时间】:2020-01-08 12:05:59
【问题描述】:
我正在做一个我们应该评估供应商的项目,在这个数据库中我有这张表EvaluationGrade:
+------+---------------------+------------+-----------+
| Id | EvaluationMethodId | FromScore | ToScore |
+------+---------------------+------------+-----------+
| 1 | 2 | 1 | 20 |
| 2 | 2 | 21 | 50 |
| 3 | 2 | 51 | 70 |
| 4 | 2 | 71 | 100 |
| 5 | 3 | 1 | 20 |
| 6 | 3 | 31 | 40 |
+------+---------------------+------------+-----------+
此表对分数进行分类,我确信EvaluationMethodId=2 范围值填充 1 到 100(就像上面的示例一样)。
我正在寻找这样的东西:
+---------------------+------------+
| EvaluationMethodId | Sum |
+---------------------+------------+
| 2 | 100 |
| 3 | 30 |
+---------------------+------------+
这是我尝试的方式:
WITH myUpdate
AS (SELECT emg.Id,emg.EvaluationMethodId,
SUM(emg.ToGrade - emg.FromGrade) + 1 AS SumScope
FROM generalsup.EvaluationMethodGrading emg
GROUP BY emg.Id,emg.EvaluationMethodId)
SELECT myUpdate.EvaluationMethodId, SUM(myUpdate.SumScope) AS SumScopeAll
FROM myUpdate
GROUP BY myUpdate.EvaluationMethodId;
但我使用的窗口函数对服务器的开销较小。
【问题讨论】:
-
请显示您的尝试查询
-
@Squirrel - 我提出了查询
-
同一个EvaluationMethodId是否有重叠的情况,比如FromScore =1, ToScore = 20 and FromScore =10, ToScore = 30?
-
@forpas- 不,在插入之前检查重叠,所以没有重叠。
标签: sql-server tsql window-functions