不同班級的同學,成績對應不同等級,且不同等級的數量還不同,求一個查詢方法,先感謝各位大神了。如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 及格
uj5u.com熱心網友回復:
聯合查詢,取大于等級分數中最大的那個等級就可以了(按人分組,order by 等級分數降序,取第一個)create table students(sid int ,score int,did int )
insert into students
select 1,90,1
union
select 2,80,1
union
select 3,72,1
union
select 4,90,2
union
select 5,80,2
union
select 6,72,2
create table degres(id int ,score int,title varchar(20))
insert into degres
select 1,90,'優秀'
union
select 1,80,'良好'
union
select 1,70,'中等'
union
select 1,60,'及格'
union
select 2,85,'良好'
union
select 2,60,'及格'
select a.sid,a.score,a.did,a.title from (
select s.*,d.title ,
row_number() over(partition by s.sid order by d.score desc) as n
from students as s
left join degres as d on s.did=d.id
where s.score>=d.score
)as a where n=1
uj5u.com熱心網友回復:
查詢結果
uj5u.com熱心網友回復:
感謝各位,這個思路應該可行的。我去試下uj5u.com熱心網友回復:
USE tempdb
GO
IF OBJECT_ID('dbo.[emp]') IS NOT NULL
DROP TABLE dbo.[emp]
GO
CREATE TABLE dbo.[emp](
[eid] INT
,[score] INT
,[did] INT
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[emp] VALUES(N'1',N'90',N'1')
INSERT INTO dbo.[emp] VALUES(N'2',N'80',N'1')
INSERT INTO dbo.[emp] VALUES(N'3',N'72',N'1')
INSERT INTO dbo.[emp] VALUES(N'4',N'90',N'2')
INSERT INTO dbo.[emp] VALUES(N'5',N'80',N'2')
INSERT INTO dbo.[emp] VALUES(N'6',N'72',N'2')
GO
IF OBJECT_ID('dbo.[lev]') IS NOT NULL
DROP TABLE dbo.[lev]
GO
CREATE TABLE dbo.[lev](
[did] INT
,[score] INT
,[title] NVARCHAR(10)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[lev] VALUES(N'1',N'90',N'優秀')
INSERT INTO dbo.[lev] VALUES(N'1',N'80',N'良好')
INSERT INTO dbo.[lev] VALUES(N'1',N'70',N'中等')
INSERT INTO dbo.[lev] VALUES(N'1',N'60',N'及格')
INSERT INTO dbo.[lev] VALUES(N'2',N'85',N'良好')
INSERT INTO dbo.[lev] VALUES(N'2',N'60',N'及格')
------ 以上為測驗表及測驗資料 --------
SELECT emp.*,f.title
FROM emp OUTER APPLY (
SELECT TOP 1 lev.title FROM dbo.lev WHERE emp.did=lev.did AND emp.score>=lev.score ORDER BY lev.score DESC
) AS f
/*
eid score did title
1 90 1 優秀
2 80 1 良好
3 72 1 中等
4 90 2 良好
5 80 2 及格
6 72 2 及格
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/21080.html
標籤:疑難問題
