前段日子,做了个系统,领导需要按双重区分大小自定义排序.今天用了一个下午,终于把它完成.分享一下,大家有好算法共享一下,助我提高性能.

场景分析:先按系别排序,教师有领导大小之分,再进行第二次排序.显示!

CREATE DATABASE tempdata
go

use tempdata

/*创建三个表*/
--
CREATE TABLE 教师表
(id 
int not null primary key identity(1,1),
系别 
nchar(20)  NOT NULL,
教师 
nchar(8NOT NULL)

CREATE TABLE 排序表
(id 
int not null primary key identity(1,1),
序列 
nchar(20not null)

--降序,id大的排到前面
CREATE TABLE 排序二表
(id 
int not null primary key identity(1000,-1),
序列 
nchar(20not null)

go

/*插入多条数据*/
INSERT INTO 教师表 VALUES ('计算机系''李小明')
INSERT INTO 教师表 VALUES ('数学系''刘德华')
INSERT INTO 教师表 VALUES ('数学系''张学友')
INSERT INTO 教师表 VALUES ('计算机系''黎明')
INSERT INTO 教师表 VALUES ('外语系''郭富城')
INSERT INTO 教师表 VALUES ('美术系''钟楚红')
INSERT INTO 教师表 VALUES ('法律系''吴宗宪')

INSERT INTO 排序表 VALUES ('计算机系')
INSERT INTO 排序表 VALUES ('法律系')
INSERT INTO 排序表 VALUES ('数学系')
INSERT INTO 排序表 VALUES ('外语系')
INSERT INTO 排序表 VALUES ('美术系')

INSERT INTO 排序二表 VALUES ('黎明')
INSERT INTO 排序二表 VALUES ('张学友')
INSERT INTO 排序二表 VALUES ('刘德华')
INSERT INTO 排序二表 VALUES ('李小明')

go
select * from 教师表
select * from 排序表
select * from 排序二表 order by id DESC
go

初始三个表



/*进行排序*/

select e.系别,e.教师 into #decl
from 排序二表 as f right outer join 教师表 as e  
on f.序列=e.教师
order by f.id DESC

select a.系别,a.教师
from #decl as a inner join 排序表 as b on b.序列=a.系别
order by b.id
go

最后结果



执行计划