表是这样的
id  class   name
1    数学   张一
2    音乐   陈一
3    数学   旺旺
4    语文   地方
5    英语   流程
6    语文   地方
7    音乐   的我
8    数学   风格
9    语文   和你
10   语文   二位
...
...
...class为课程
name为学生
学生比较多,那么会有一定概率出现连续2个以上的class是一样的,比如记录9和10
现在想实现的是一个排序避免这种连续的class情况,当然最理想的情况是按class字段group之后,依次显示如class字段group之后,里面包含数学、音乐、语文、英语效果图id  class   name
1    数学   张一
2    音乐   陈一
4    语文   地方
5    英语   流程
3    数学   旺旺
7    音乐   的我
6    语文   地方
8    数学   风格
9    语文   和你
10   语文   二位
...
...
...

解决方案 »

  1.   

    排序
    select id , class  , name from 你的表
    order by  class ,  name没看明白你到底要排成什么样
      

  2.   

    回复2楼 
    举个例子 有8个苹果 3个橙子 5个香蕉
    那么要我select排序结果是一个苹果,一个橙子,一个香蕉,然后再一个苹果,一个橙子,一个香蕉,依次类推也就是不同的class各取一个,然后一直取下去order by  class ,  name明显是不行的 这样的结果都是
    苹果、苹果、苹果、苹果、苹果、苹果、苹果、苹果、橙子、橙子、橙子、香蕉、香蕉、香蕉、香蕉、香蕉
      

  3.   


    --> 测试数据:@t
    declare @t table([id] int,[class] varchar(4),[name] varchar(4))
    insert @t
    select 1,'数学','张一' union all
    select 2,'音乐','陈一' union all
    select 3,'数学','旺旺' union all
    select 4,'语文','地方' union all
    select 5,'英语','流程' union all
    select 6,'语文','地方' union all
    select 7,'音乐','的我' union all
    select 8,'数学','风格' union all
    select 9,'语文','和你' union all
    select 10,'语文','二位';with maco as
    (
    select ROW_NUMBER() over (partition by class order by id) as num, * from @t
    )
    select id,class,name from maco order by num,id
    /*
    id          class name
    ----------- ----- ----
    1           数学    张一
    2           音乐    陈一
    4           语文    地方
    5           英语    流程
    3           数学    旺旺
    6           语文    地方
    7           音乐    的我
    8           数学    风格
    9           语文    和你
    10          语文    二位
    */
      

  4.   

    ;with maco as
    (
    select ROW_NUMBER() over (partition by class order by name) as num, * from @t
    )
    select id,class,name from maco order by num,name这样也可以