动态查询分门别类

动态查询分类
有两个表
1、成绩明细表
学号   姓名       成绩
001    张三        99
002    李四        88
003    王五        77
004    赵四        55

2、成绩登记表
序号    成绩大于等于     成绩小于    等级
1       90                 1000      优秀
2       80                 90        良好
3       70                 80        中等
4       60                 70        及格
5       0                  60        不及格

想根据表2来查询出如下结果:
学号   姓名       成绩   等级
001    张三        99    优秀
002    李四        88    良好
003    王五        77    中等
004    赵四        55    不及格

请问如何实现

------解决思路----------------------


create table [成绩明细表]([学号] varchar(10),[姓名] varchar(10),[成绩] int)
insert into [成绩明细表]([学号],[姓名],[成绩])
select '001','张三',99 union all
select '002','李四',88 union all
select '003','王五',77 union all
select '004','赵四',55 
go

create table[成绩登记表]([序号] int,[成绩大于等于] int,[成绩小于] int,[等级] varchar(10))
insert into [成绩登记表]([序号],[成绩大于等于],[成绩小于],[等级])
select 1,90,1000,'优秀' union all
select 2,80,90,'良好' union all
select 3,70,80,'中等' union all
select 4,60,70,'及格' union all
select 5,0,60,'不及格'

select a.*,b.[等级]
from [成绩明细表] a,[成绩登记表] b
where a.[成绩] between b.[成绩大于等于] and b.[成绩小于]

学号         姓名         成绩          等级
---------- ---------- ----------- ----------
001        张三         99          优秀
002        李四         88          良好
003        王五         77          中等
004        赵四         55          不及格

(4 行受影响)

drop table [成绩明细表]
drop table [成绩登记表]

------解决思路----------------------


create table test(学号 nvarchar(5),姓名 nvarchar(10),成绩 int)
insert into test values ('001','张三',99)
insert into test values ('002','李四',88)
insert into test values ('003','王五',77)
insert into test values ('004','赵四',55)
create table test1(序号 int,成绩大于等于 int,成绩小于 int,等级 nvarchar(10))
insert into test1 values(1,90,1000,'优秀')
insert into test1 values(2,80,90,'良好')
insert into test1 values(3,70,80,'中等')
insert into test1 values(4,60,70,'及格')
insert into test1 values(5,0,60,'不及格')


select t.*,t1.等级
from test t 
LEFT join test1 t1
ON t.成绩>=t1.成绩大于等于 and t.成绩<t1.成绩小于

select t.*,t1.等级
from test t ,test1 t1
where t.成绩>=t1.成绩大于等于 and t.成绩<t1.成绩小于

------解决思路----------------------
;with tb1(学号 ,姓名,成绩) as
(
select 001,    'zs',        99 union all
select 002,    'ls',        88 union all
select 003,    'ww',        77 union all
select 004,    'zhs',        55
)
,tb2(序号,    成绩大于等于,     成绩小于,    等级) as
(
select 1,       90,                 100,      'a' union all
select 2,       80,                 90,        'b' union all
select 3,       70,                 80,       ' c' union all
select 4,       60,                 70,       ' d' union all
select 5,       0 ,                 60,       ' e'
)

select tb1.*, tb2.等级 from tb1
left outer join tb2 on tb1.成绩>=tb2.成绩大于等于 and tb1.成绩<tb2.成绩小于