34,587
社区成员
发帖
与我相关
我的任务
分享
create table student(编号 int , 姓名 varchar(10) , 性别 varchar(10) , 年级 varchar(10) , 班级 varchar(10) , 总分 int)
insert into student values(1, 'AA' , '女' , '' , '' , 620 )
insert into student values(2, 'BB' , '男' , '' , '' , 310 )
insert into student values(3, 'CC' , '男' , '' , '' , 420 )
insert into student values(4, 'DD' , '女' , '' , '' , 325 )
insert into student values(5, 'EE' , '女' , '' , '' , 190 )
insert into student values(6, 'EW' , '女' , '' , '' , 590 )
insert into student values(7, 'EW' , '女' , '' , '' , 593 )
go
--search
select 编号,姓名,性别,年级,总分,班级 = case px%3 when 1 then '1班' when 2 then '3班' else '2班' end from
(
select t.* , px = (select count(1) from student where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1 from student t
) m
/*
编号 姓名 性别 年级 总分 班级
----------- ---------- ---------- ---------- ----------- ----
1 AA 女 620 1班
2 BB 男 310 2班
3 CC 男 420 1班
4 DD 女 325 3班
5 EE 女 190 1班
6 EW 女 590 2班
7 EW 女 593 3班
(所影响的行数为 7 行)
*/
--update
update student
set 班级 = n.班级
from student , (select 编号,姓名,性别,年级,总分,班级 = case px%3 when 1 then '1班' when 2 then '3班' else '2班' end from
(
select t.* , px = (select count(1) from student where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1 from student t
) m
) n
where student.编号 = n.编号
select * from student
/*
编号 姓名 性别 年级 班级 总分
----------- ---------- ---------- ---------- ---------- -----------
1 AA 女 1班 620
2 BB 男 2班 310
3 CC 男 1班 420
4 DD 女 3班 325
5 EE 女 1班 190
6 EW 女 2班 590
7 EW 女 3班 593
(所影响的行数为 7 行)
*/
drop table student
--search
select 编号,姓名,性别,年级,总分,班级 = case px%3 when 1 then '1班' when 2 then '3班' else '2班' end from
(
select t.* , px = (select count(1) from student where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1 from student t
) m
--update
update student
set 班级 = n.班级
from student , (select 编号,姓名,性别,年级,总分,班级 = case px%3 when 1 then '1班' when 2 then '3班' else '2班' end from
(
select t.* , px = (select count(1) from student where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1 from student t
) m
) n
where student.编号 = n.编号
--search
select 编号,姓名,性别,年级,总分,班级 = case px%3 when 1 then '1班' when 2 then '3班' else '2班' end from
(
select t.* , px = (select count(1) from student where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1 from student t
) m
--来个同分,你看看结果对不对?
create table ts(编号 int , 姓名 varchar(10) , 性别 varchar(10) , 年级 varchar(10) , 班级 varchar(10) , 总分 int)
insert into ts values(1, 'AA' , '女' , '' , '' , 620 )
insert into ts values(2, 'BB' , '男' , '' , '' , 310 )
insert into ts values(3, 'CC' , '男' , '' , '' , 420 )
insert into ts values(4, 'DD' , '女' , '' , '' , 325 )
insert into ts values(5, 'EE' , '女' , '' , '' , 190 )
insert into ts values(6, 'EW' , '女' , '' , '' , 590 )
insert into ts values(7, 'EW' , '女' , '' , '' , 593 )
insert into ts values(8, 'FW' , '女' , '' , '' , 593 )
create table tc(编号 int,年级 varchar(10) , 班级 varchar(10))
insert into tc values(1, '初一', '1班')
insert into tc values(3, '初一', '2班')
insert into tc values(2, '初一', '3班')
go
--查询
select m.编号,m.姓名,m.性别,n.年级,n.班级,m.总分 from
(
select t.* , px = (((select count(1) from ts where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1)-1)% (select count(*) cnt from tc) from ts t
) m,tc n
where m.px = n.编号 - 1
--更新
update ts
set 年级 = o.年级,班级 = o.班级
from ts,(select m.编号,m.姓名,m.性别,n.年级,n.班级,m.总分 from
(
select t.* , px = (((select count(1) from ts where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1)-1)% (select count(*) cnt from tc) from ts t
) m,tc n
where m.px = n.编号 - 1
) o
where ts.编号 = o.编号
select * from ts
drop table ts,tc
/*编号 姓名 性别 年级 班级 总分
----------- ---------- ---------- ---------- ---------- -----------
1 AA 女 初一 1班 620
2 BB 男 初一 1班 310
3 CC 男 初一 3班 420
4 DD 女 初一 2班 325
5 EE 女 初一 3班 190
6 EW 女 初一 1班 590
7 EW 女 初一 2班 593
8 FW 女 初一 3班 593
(所影响的行数为 8 行)
*/
create table ts(编号 int , 姓名 varchar(10) , 性别 varchar(10) , 年级 varchar(10) , 班级 varchar(10) , 总分 int)
insert into ts values(1, 'AA' , '女' , '' , '' , 620 )
insert into ts values(2, 'BB' , '男' , '' , '' , 310 )
insert into ts values(3, 'CC' , '男' , '' , '' , 420 )
insert into ts values(4, 'DD' , '女' , '' , '' , 325 )
insert into ts values(5, 'EE' , '女' , '' , '' , 190 )
insert into ts values(6, 'EW' , '女' , '' , '' , 590 )
insert into ts values(7, 'EW' , '女' , '' , '' , 593 )
create table tc(编号 int,年级 varchar(10) , 班级 varchar(10))
insert into tc values(1, '初一', '1班')
insert into tc values(3, '初一', '2班')
insert into tc values(2, '初一', '3班')
go
--查询
select m.编号,m.姓名,m.性别,n.年级,n.班级,m.总分 from
(
select t.* , px = (((select count(1) from ts where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1)-1)% (select count(*) cnt from tc) from ts t
) m,tc n
where m.px = n.编号 - 1
/*
编号 姓名 性别 年级 班级 总分
----------- ---------- ---------- ---------- ---------- -----------
1 AA 女 初一 1班 620
2 BB 男 初一 2班 310
3 CC 男 初一 1班 420
4 DD 女 初一 3班 325
5 EE 女 初一 1班 190
6 EW 女 初一 2班 590
7 EW 女 初一 3班 593
(所影响的行数为 7 行)
*/
--更新
update ts
set 年级 = o.年级,班级 = o.班级
from ts,(select m.编号,m.姓名,m.性别,n.年级,n.班级,m.总分 from
(
select t.* , px = (((select count(1) from ts where 总分 > t.总分 or (总分 = t.总分 and 编号 > t.编号)) + 1)-1)% (select count(*) cnt from tc) from ts t
) m,tc n
where m.px = n.编号 - 1
) o
where ts.编号 = o.编号
select * from ts
/*
编号 姓名 性别 年级 班级 总分
----------- ---------- ---------- ---------- ---------- -----------
1 AA 女 初一 1班 620
2 BB 男 初一 2班 310
3 CC 男 初一 1班 420
4 DD 女 初一 3班 325
5 EE 女 初一 1班 190
6 EW 女 初一 2班 590
7 EW 女 初一 3班 593
(所影响的行数为 7 行)
*/
--drop table ts,tc