疯了,有没有一句简单的话搞定

phyedu 2010-09-20 08:28:23
越弄越复杂,结果问题还没有解决,
有如下数据
ID XH
A 1
A 2
A 3
B 4
B 5
C 6
C 7
D 8
得到如下排列
ID XH
A 1
B 4
C 6
D 8
A 2
B 5
C 7
A 3
...全文
50 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
貓哥是個傳說 2010-09-21
  • 打赏
  • 举报
回复
學習一下
dawugui 2010-09-20
  • 打赏
  • 举报
回复
create table tb(ID varchar(10),XH int)
insert into tb values('A', 1)
insert into tb values('A', 2)
insert into tb values('A', 3)
insert into tb values('B', 4)
insert into tb values('B', 5)
insert into tb values('C', 6)
insert into tb values('C', 7)
insert into tb values('D', 8)
go

--sql 2000

select id , xh from
(
select t.* , px = (select count(1) from tb where id = t.id and xh < t.xh) + 1 from tb t
) m
order by px , id

drop table tb

/*

id xh
---------- -----------
A 1
B 4
C 6
D 8
A 2
B 5
C 7
A 3

(所影响的行数为 8 行)

*/




create table tb(ID varchar(10),XH int)
insert into tb values('A', 1)
insert into tb values('A', 2)
insert into tb values('A', 3)
insert into tb values('B', 4)
insert into tb values('B', 5)
insert into tb values('C', 6)
insert into tb values('C', 7)
insert into tb values('D', 8)
go

-- sql 2005
select id , xh from
(
select t.* , px = row_number() over(partition by id order by xh) from tb t
) m
order by px , id

drop table tb

/*

id xh
---------- -----------
A 1
B 4
C 6
D 8
A 2
B 5
C 7
A 3

(8 行受影响)


*/
dawugui 2010-09-20
  • 打赏
  • 举报
回复
-- sql 2005
select id , xh from
(
select t.* , px = row_number() over(partition by id order by xh) from tb t
) m
order by px , id
dawugui 2010-09-20
  • 打赏
  • 举报
回复
--sql 2000

select id , xh from
(
select t.* , px = (select count(1) from tb where id = t.id and xh < t.xh) + 1 from tb t
) m
order by px , id
liangCK 2010-09-20
  • 打赏
  • 举报
回复
SELECT * FROM tb
ORDER BY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY XH);


SELECT * FROM tb AS A
ORDER BY (SELECT COUNT(*) FROM tb
WHERE ID=A.ID AND XH < A.XH)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧