我正在使用Microsoft SQL Server,并且具有以下表格:
dbo.student
:
+-----------+------------+
| StudentID | Percentage |
+-----------+------------+
| 100 | 0.75 |
| 101 | 0.82 |
| 102 | 0.95 |
| 103 | 0.59 |
+-----------+------------+
dbo.GradeMaster
:
+---------+-------+-----------------------+--------------------+
| GradeID | Grade | PercentageRangeBottom | PercentageRangeTop |
+---------+-------+-----------------------+--------------------+
| 1 | A | 0.91 | 1 |
| 2 | B | 0.81 | 0.9 |
| 3 | C | 0.71 | 0.8 |
| 4 | D | 0.61 | 0.7 |
| 5 | F | 0 | 0.6 |
+---------+-------+-----------------------+--------------------+
我正在尝试生成一个报告,该报告将显示字母等级和学生证。我不想使用带有硬编码范围的巨型case语句,以防任何人决定更新范围dbo.GradeMaster
(例如,A变成.85-1)。在这两个表上进行联接的最佳方法是什么?我考虑过还要创建一个计算字母等级的函数,但是我想不出最聪明的方法来解决这个问题。任何提示将不胜感激。这就是我希望报告看起来像的样子。
+-----------+-------+
| StudentID | Grade |
+-----------+-------+
| 100 | C |
| 101 | B |
| 102 | A |
| 103 | F |
+-----------+-------+
像下面这样的东西应该可以解决问题:
SELECT Student.StudentId, GradeMaster.Grade
FROM Student
INNER JOIN GradeMaster ON
Student.Percentage BETWEEN GradeMaster.PercentageRangeBottom AND GradeMaster.PercentageRangeTop
您可以使用BETWEEN
或类似的逻辑来执行联接,而不是直接进行场对场联接
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句