怎么按照给出的数字大小讲多列按照此优先级排序
如何按照给出的数字大小讲多列按照此优先级排序?
是这样的,有一个学生表,里面存入学生的基本信息
专业,年级,班级,寝室号
我想现在写一个存储过程,分别传入排序时这些列的优先级数字
比如 专业 = 1,寝室号 =2,班级=3,年级=4
那么按照从大到小的优先级排序,先查找相同年级的同学,排在最前面,然后在剩下来的同学中一次按照 班级,寝室号,专业排序
最后给出整个排序完的学生列表..
小弟为了这个东西想了两天了,能力有限,临时表什么的都用上了还是无解,请各位大大指点一二.
------解决方案--------------------
存储过程用动态SQL去实现!
是这样的,有一个学生表,里面存入学生的基本信息
专业,年级,班级,寝室号
我想现在写一个存储过程,分别传入排序时这些列的优先级数字
比如 专业 = 1,寝室号 =2,班级=3,年级=4
那么按照从大到小的优先级排序,先查找相同年级的同学,排在最前面,然后在剩下来的同学中一次按照 班级,寝室号,专业排序
最后给出整个排序完的学生列表..
小弟为了这个东西想了两天了,能力有限,临时表什么的都用上了还是无解,请各位大大指点一二.
------解决方案--------------------
存储过程用动态SQL去实现!
- SQL code
create proc get_All(@order varchar(1000)) as begin declare @sql varchar(8000) set @sql = 'select * from tb ' if @order is not null set @order = replace(replace(@order,' 1,',' asc,'),' 0,',' desc,') else set @order = '' set @sql = @sql + ' ' + left(@order,len(@order)-1) exec(@sql) end go --> test exec get_All 'id 1,name 0,' --注意后边有 , 号!
------解决方案--------------------
- SQL code
create table tb(id int,name varchar(10)) insert into tb select 1,'a' union all select 1,'b' union all select 2,'c' union all select 2,'a' union all select 11,'c' go create proc get_All(@order varchar(1000)) as begin declare @sql varchar(8000) set @sql = 'select * from tb ' if @order is not null set @order = ' order by ' + replace(replace(@order,' 1,',' asc,'),' 0,',' desc,') else set @order = '' set @sql = @sql + ' ' + left(@order,len(@order)-1) exec(@sql) end go --> test exec get_All 'id 1,name 0,' --注意后边有 , 号! drop proc get_All drop table tb /******************* id name ----------- ---------- 1 b 1 a 2 c 2 a 11 c (5 行受影响)
------解决方案--------------------
- SQL code
create table test1015(专业 int,寝室号 int,班级 int,年级 int) insert into test1015 select 1,11,1,1 union all select 1,11,2,1 union all select 1,12,3,1 union all select 2,9,1,2 union all select 2,9,2,2 union all select 2,8,3,1 declare @param varchar(30) set @param='年级,班级,寝室号,专业' --不需要1,2,3,4你直接控制它们的位置就可以了。 declare @sql varchar(8000) set @sql='select * from test1015 order by '+@param exec(@sql) drop table test1015 /* 专业 寝室号 班级 年级 ----------- ----------- ----------- ----------- 1 11 1 1 1 11 2 1 2 8 3 1 1 12 3 1 2 9 1 2 2 9 2 2 */