我现在要实现两种排序方式
一按字段 编码排序 二 按人员排序假设表中字段 code user J0012 张三
D0054 张三
j0015 张三
t0048 李四
0048 王五
T0452 张三编码排序 按J D T 没有字母 排序 不区分大小写人员排序 按指定人员 如用户选择 王五,张三,李四 那就按这样的人员排序
一按字段 编码排序 二 按人员排序假设表中字段 code user J0012 张三
D0054 张三
j0015 张三
t0048 李四
0048 王五
T0452 张三编码排序 按J D T 没有字母 排序 不区分大小写人员排序 按指定人员 如用户选择 王五,张三,李四 那就按这样的人员排序
order by case left(code,1) when 'J' then 1
when 'D' then 2 when 'T' then 3 end
insert into tb values('J0012', '张三')
insert into tb values('D0054', '张三')
insert into tb values('j0015', '张三')
insert into tb values('t0048', '李四')
insert into tb values('0048' , '王五')
insert into tb values('T0452', '张三')
goselect * from tb
order by case left(code,1) when 'J' then 1
when 'D' then 2 when 'T' then 3 else 4 end drop table tb/*
code user
---------- ----------
J0012 张三
j0015 张三
D0054 张三
t0048 李四
T0452 张三
0048 王五(所影响的行数为 6 行)
*/
按编码排:ORDER BY CASE LEFT(Code,1) WHEN 'J' THEN 1 WHEN 'D' THEN 2 WHEN 'T' THEN 3 ELSE 4 END按指定用户名排序:DECLARE @SortKey VARCHAR(30)
SET @SortKey='王五,张三,李四'ORDER BY CHARINDEX(Code,@SortKey)
insert into tb values('J0012', '张三')
insert into tb values('D0054', '张三')
insert into tb values('j0015', '张三')
insert into tb values('t0048', '李四')
insert into tb values('0048' , '王五')
insert into tb values('T0452', '张三')
goselect * from tb
order by case left(code,1) when 'J' then 1 when 'D' then 2 when 'T' then 3 else 4 end ,
case [user] when '王五' then 1 when '张三' then 2 when '李四' then 3 else 4 enddrop table tb/*
code user
---------- ----------
J0012 张三
j0015 张三
D0054 张三
T0452 张三
t0048 李四
0048 王五(所影响的行数为 6 行)
*/
declare @str varchar(100)
select @str='王五,张三,李四'
select * from tb
order by charindex([user],@str)
就是人员
declare @str varchar(100)
select @str='王五,张三,李四'
select * from tb
order by charindex([user],@str)王五,张三,李四 比如我先把这3位排在前面其他人员排在他们之后前3位指定这样排
王五,张三,李四
insert into tb values('J0012', '张三')
insert into tb values('D0054', '张三')
insert into tb values('j0015', '张三')
insert into tb values('t0048', '李四')
insert into tb values('0048' , '王五')
insert into tb values('T0452', '张三')
goselect * from tb
order by case left(code,1) when 'J' then 1 when 'D' then 2 when 'T' then 3 else 4 end ,
case [user] when '王五' then 1 when '张三' then 2 when '李四' then 3 else 4 enddrop table tb/*
code user
---------- ----------
J0012 张三
j0015 张三
D0054 张三
T0452 张三
t0048 李四
0048 王五(所影响的行数为 6 行)
*/
declare @str nvarchar(100)
select @str=N'王五,张三'
select *,charindex([user],@str) from tb
order by case when charindex([user],@str)>0 then charindex([user],@str) else 9999 end
declare @str varchar(100)
select @str='王五,张三,李四'
select * from tb
order by (case when charindex([user],@str)>0 then charindex([user],@str) else 999 end)
declare @str varchar(100)
select @str='王五,张三,李四'
select * from tb
order by (case
when charindex([user],@str)>0
then charindex([user],@str)
else (select count(distinct user) from tb)
end)