表是这样的
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 语文 二位
...
...
...
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 语文 二位
...
...
...
select id , class , name from 你的表
order by class , name没看明白你到底要排成什么样
举个例子 有8个苹果 3个橙子 5个香蕉
那么要我select排序结果是一个苹果,一个橙子,一个香蕉,然后再一个苹果,一个橙子,一个香蕉,依次类推也就是不同的class各取一个,然后一直取下去order by class , name明显是不行的 这样的结果都是
苹果、苹果、苹果、苹果、苹果、苹果、苹果、苹果、橙子、橙子、橙子、香蕉、香蕉、香蕉、香蕉、香蕉
--> 测试数据:@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 语文 二位
*/
(
select ROW_NUMBER() over (partition by class order by name) as num, * from @t
)
select id,class,name from maco order by num,name这样也可以