注册 登录
编程论坛 SQL Server论坛

求一个不同人成绩对应不同成绩等级的查询

wyysmjlyb 发布于 2020-06-22 08:57, 1451 次点击
不同班级的同学,成绩对应不同等级,且不同等级的数量还不同,求一个查询方法。如1班分 90分优秀,80分良好,70中等,60分及格四挡,2班分,85分良好,60及格两档。
有表如下,简易的表,如果需要辅助列可以随便加的。
人员表
eid         score          did
人员的id    获得的分数     对应的班级id
1           90             1
2           80             1
3           72             1
4           90             2
5           80             2
6           72             2
等级表
id         score          title
班级id     分数           等级名称
1          90             优秀
1          80             良好
1          70             中等
1          60             及格
2          85             良好
2          60             及格
2 回复
#2
oldfish962020-07-26 01:54
DECLARE @Personnel TABLE
    (
        eid INT,   --人员的id
        score INT, --获得的分数
        did INT    --对应的班级id
    )
DECLARE @Grade TABLE
    (
        id INT,           --班级id
        score INT,        --分数
        title VARCHAR(20) --等级名称
    )


INSERT @Personnel( eid, score, did )
VALUES
( 1, 90, 1 ),
( 2, 80, 1 ),
( 3, 72, 1 ),
( 4, 90, 2 ),
( 5, 80, 2 ),
( 6, 72, 2 ),
( 7, 98, 1 )

INSERT @Grade( id, score, title )
VALUES
( 1, 90, '优秀' ),
( 1, 80, '良好' ),
( 1, 70, '中等' ),
( 1, 60, '及格' ),
( 2, 85, '良好' ),
( 2, 60, '及格' ),
( 1, 95, '优秀+' )

DECLARE @Grade加区间 TABLE( id INT, title VARCHAR(20), min_score INT, max_score INT );

WITH te
AS
    (
    SELECT ROW_NUMBER() OVER ( PARTITION BY id ORDER BY score ) 顺序, * FROM @Grade AS A --ORDER BY id
    )
INSERT @Grade加区间( id, title, min_score, max_score )
    SELECT t.id, t.title, t.score, ISNULL(( SELECT TOP 1 te.score FROM te WHERE te.顺序 = t.顺序 + 1 ), 100) AS max_score
        FROM te t

SELECT * FROM @Grade加区间


SELECT *,
       ISNULL(( SELECT TOP 1 G.title FROM @Grade加区间 AS G WHERE P.score >= G.min_score AND P.score < G.max_score ), '其他') 等级
    FROM @Personnel AS P
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2020-7-26 01:59编辑过]

#3
sssooosss2020-08-07 08:20
共同学习
1