我现在要实现两种排序方式
一按字段 编码排序   二 按人员排序假设表中字段 code     user           J0012     张三
             D0054    张三
             j0015    张三
             t0048    李四
             0048     王五
             T0452    张三编码排序 按J D T 没有字母 排序 不区分大小写人员排序 按指定人员 如用户选择 王五,张三,李四 那就按这样的人员排序

解决方案 »

  1.   

    select * from tb
    order by case left(code,1) when 'J' then 1
    when 'D' then 2 when 'T' then 3 end 
      

  2.   

    create table tb(code varchar(10),[user] varchar(10))
    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 行)
    */
      

  3.   


    按编码排: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)
      

  4.   

    create table tb(code varchar(10),[user] varchar(10))
    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 行)
    */
      

  5.   


    declare @str varchar(100)
    select @str='王五,张三,李四'
    select * from tb 
    order by charindex([user],@str)
      

  6.   

    还有个地方请教下
    就是人员
    declare @str varchar(100)
    select @str='王五,张三,李四'
    select * from tb 
    order by charindex([user],@str)王五,张三,李四 比如我先把这3位排在前面其他人员排在他们之后前3位指定这样排
    王五,张三,李四
      

  7.   

    create table tb(code varchar(10),[user] varchar(10))
    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 行)
    */
      

  8.   


    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
      

  9.   


    declare @str varchar(100)
    select @str='王五,张三,李四'
    select * from tb 
    order by (case when charindex([user],@str)>0 then charindex([user],@str) else 999 end)
      

  10.   


    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)