首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

字段按要求排序解决办法

2012-09-15 
字段按要求排序表数据姓名 年龄 职业A20教师B22医生C20教师D21律师E23教师F24工人要求 对数据 按职业排序

字段按要求排序
表数据
姓名 年龄 职业
A 20 教师
B 22 医生
C 20 教师
D 21 律师
E 23 教师
F 24 工人

要求 对数据 按职业排序 教师、医生 排在最前面

[解决办法]

SQL code
select * from 你的表 order by (case when 职业 in('教师','医生') then 0 else 1 end) asc,职业;
[解决办法]
SQL code
--> 测试数据:@Tdeclare @T table([姓名] varchar(1),[年龄] int,[职业] varchar(4))insert @Tselect 'A',20,'教师' union allselect 'B',22,'医生' union allselect 'C',20,'教师' union allselect 'D',21,'律师' union allselect 'E',23,'教师' union allselect 'F',24,'工人'SELECT * FROM @T ORDER BY CASE [职业] WHEN '教师' THEN 1 WHEN '医生'  THEN 2 ELSE 3 END/*姓名   年龄          职业---- ----------- ----A    20          教师C    20          教师E    23          教师B    22          医生D    21          律师F    24          工人*/
[解决办法]
SQL code
--> 测试数据:@Tdeclare @T table([姓名] varchar(1),[年龄] int,[职业] varchar(4))insert @Tselect 'A',20,'教师' union allselect 'B',22,'医生' union allselect 'C',20,'教师' union allselect 'D',21,'律师' union allselect 'E',23,'教师' union allselect 'F',24,'工人'SELECT * FROM @T ORDER BY CHARINDEX([职业],'医生,教师') DESC/*姓名   年龄          职业---- ----------- ----A    20          教师C    20          教师E    23          教师B    22          医生D    21          律师F    24          工人*/
[解决办法]
象这样按职业排序的,最好建一个职业排序表,
格式如下
职业id号,职业名称,职业排序号

查询时与此表关联对结果根据职业排序号进行排序
[解决办法]
最好是在做一个排序的表。。因为你这个排序内容和顺序可变性很强

或者定义一个排序的字符串
SQL code
declare @o varchar(100)set @o=',医生,教师,工人,学生,'select * from tb order by charindex([职业],@o)
[解决办法]
最好再建立一个职业排序的表,否则直接固化到sql语句中去很难维护而且可变性很差,什么时候你增加了一个主席的职业要排在最前面你只能修改sql语句才可以。如果有职业排序表的话只要给主席取个最大的(最小)的序号就可以了。

热点排行