举例:我有一个表TB,如下
id   fz
1    第一期第二版
2    第一期第一版
3    第一期第一版
4    第一期第三版
5    第一期第四版
6    第一期第一版我现在要先对fz进行group by,然后根据group by 后的内容正常排序成“第一期第一版、第一期第二版、第一期第三版、第一期第四版”有什么办法么?

解决方案 »

  1.   

    order by charindex(fz,'第一期第一版、第一期第二版、第一期第三版、第一期第四版')
      

  2.   

    这个是中文,难搞,除非你指定.select * from tb order by case when fz like '%第一版%' then 1 when fz like '%第二版%' then 2 when fz like '%第三版%' then 3 when fz like '%第四版%' then 4 end
      

  3.   

    create table tb(d int, fz varchar(20))
    insert into tb values(1 ,   '第一期第二版') 
    insert into tb values(2 ,   '第一期第一版') 
    insert into tb values(3 ,   '第一期第一版') 
    insert into tb values(4 ,   '第一期第三版') 
    insert into tb values(5 ,   '第一期第四版') 
    insert into tb values(6 ,   '第一期第一版')
    goselect * from tb order by case when fz like '%第一版%' then 1 when fz like '%第二版%' then 2 when fz like '%第三版%' then 3 when fz like '%第四版%' then 4 enddrop table tb /*
    d           fz                   
    ----------- -------------------- 
    2           第一期第一版
    3           第一期第一版
    6           第一期第一版
    1           第一期第二版
    4           第一期第三版
    5           第一期第四版(所影响的行数为 6 行)
    */
      

  4.   

    create table #TT1
    (
     id int identity(1,1) primary key,
     fz nvarchar(50)
    )
    insert into #TT1 select '第一期第二版'
    insert into #TT1 select '第一期第一版'
    insert into #TT1 select '第一期第一版'
    insert into #TT1 select '第一期第三版'
    insert into #TT1 select '第一期第四版'
    insert into #TT1 select '第一期第一版'select * from #TT1
    order by
    (
      case when charindex('第一版',fz)>0 then 0.1 else
       case when charindex('第二版',fz)>0 then 0.2 else
       case when charindex('第二版',fz)>0 then 0.3 else
       0.4 end
       end
      end
    )id          fz
    ----------- --------------------------------------------------
    2           第一期第一版
    3           第一期第一版
    6           第一期第一版
    1           第一期第二版
    4           第一期第三版
    5           第一期第四版
      

  5.   

    写错啦select * from #TT1
    order by
    (
      case when charindex('第一版',fz)>0 then 0.1 else
       case when charindex('第二版',fz)>0 then 0.2 else
       case when charindex('第三版',fz)>0 then 0.3 else
       0.4 end
       end
      end
    )
    id          fz
    ----------- --------------------------------------------------
    2           第一期第一版
    3           第一期第一版
    6           第一期第一版
    1           第一期第二版
    4           第一期第三版
    5           第一期第四版
      

  6.   

    declare @a table(id INT,  fz nvarchar(20))
    insert @a select 1    ,'第一期第二版' 
    union all select 2    ,'第一期第一版' 
    union all select 3    ,'第一期第一版' 
    union all select 4    ,'第一期第三版' 
    union all select 5    ,'第一期第四版' 
    union all select 6    ,'第一期第一版' SELECT fz FROM @a a ,
    (SELECT 1 id,'一' v union ALL
     SELECT 2 id,'二'  union ALL
     SELECT 3 id,'三'  union ALL
     SELECT 4 id,'四'  union ALL
     SELECT 5 id,'五'  union ALL
     SELECT 6 id,'六'  union ALL
     SELECT 7 id,'七'  union ALL
     SELECT 8 id,'八'  union ALL
     SELECT 9 id,'九'  union ALL
     SELECT 10 id,'十'
    )b
    WHERE charindex(v+'版',fz)>0
    GROUP BY fz
    ORDER BY max(b.id)--result
    /*fz                   
    -------------------- 
    第一期第一版
    第一期第二版
    第一期第三版
    第一期第四版(所影响的行数为 4 行)
    */
      

  7.   

    谢谢楼上几位,可是我要的是GROUP BY FZ后的内容,就是输出结果要是
    fz
    -------------------
    第一期第一版
    第一期第二版
    第一期第三版
    第一期第四版