我有一个表格显示基于数字的评分数字,如下所示:
- 0-24 = 新手
- 25-49 = 实习生
- 50-74 = 中等
- 75-99 = 专业
- 100 = 超人
我需要取一个数值,并将其与上面最接近的等效等级相匹配。因此,80相当于Pro,因为它符合基本Pro级别,但低于基本超人级别。
我已经编写了一些代码来测试这一点,但 TOP 1 过滤器似乎在 JOIN 之前应用,这意味着我总是看到最低成绩而不是实际成绩。谁能帮我提出一个更好的选择?
代码在这里:
DECLARE @tbl_levels TABLE ([schemeID] int, [calevel] numeric(5,2), [desc] nvarchar(200))
DECLARE @level numeric(5,2) = 70
DECLARE @schemeID int = 1
insert into @tbl_levels ([schemeID],[calevel],[desc]) VALUES (1, 0, 'Newbie')
insert into @tbl_levels ([schemeID],[calevel],[desc]) VALUES (1, 25, 'Trainee')
insert into @tbl_levels ([schemeID],[calevel],[desc]) VALUES (1, 50, 'Moderate')
insert into @tbl_levels ([schemeID],[calevel],[desc]) VALUES (1, 75, 'Pro')
insert into @tbl_levels ([schemeID],[calevel],[desc]) VALUES (1, 100, 'Superman')
SELECT
*
FROM
(SELECT
@level as [level],
@schemeID as [schemeID]) ca LEFT OUTER JOIN
(SELECT
TOP 1 *
FROM
@tbl_levels
ORDER BY
calevel ASC
) lvl ON lvl.schemeID = ca.schemeID AND lvl.calevel <= ca.[level]