一个SQL排序难题,求指教

zhuyangpeng 2011-12-05 12:01:40
CREATE TABLE [dbo].[zf_ffr](
[id] [int] NULL,
[xingming] [varchar](10) ,
[fenshu] [int] NULL,
[lianxi] [varchar](5)
)
insert into zf_ffr values(1,'a',50,'1')
insert into zf_ffr values(2,'aa',80,'1')
insert into zf_ffr values(3,'b',60,'2')
insert into zf_ffr values(4,'bb',90,'2')
insert into zf_ffr values(5,'c',85,'3')
insert into zf_ffr values(6,'cc',30,'3')

上表实现分房排名,字段分别为编号、姓名,分数、标志。要求按分数从高到低实现双职工分房排名。其中标志位相同代表这两个分房人为一家,按照家庭分(家庭取夫妻两人高分者)从高到低排序。达到目标结果为:
4,bb,90,2
3,b,60,2
5,c,85,3
6,cc,30,3
2,aa,80,1
1,a,50,1
谢谢
...全文
67 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-12-05
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[zf_ffr](
[id] [int] NULL,
[xingming] [varchar](10) ,
[fenshu] [int] NULL,
[lianxi] [varchar](5)
)
insert into zf_ffr values(1,'a',50,'1')
insert into zf_ffr values(2,'aa',80,'1')
insert into zf_ffr values(3,'b',60,'2')
insert into zf_ffr values(4,'bb',90,'2')
insert into zf_ffr values(5,'c',85,'3')
insert into zf_ffr values(6,'cc',30,'3')
insert into zf_ffr values(7,'d',80,'4')
insert into zf_ffr values(8,'dd',30,'4')

select * from zf_ffr a order by (select max(fenshu) from zf_ffr where lianxi=a.lianxi) desc,lianxi,fenshu desc
/*
id xingming fenshu lianxi
----------- ---------- ----------- ------
4 bb 90 2
3 b 60 2
5 c 85 3
6 cc 30 3
2 aa 80 1
1 a 50 1
7 d 80 4
8 dd 30 4

(8 行受影响)

*/
go
drop table zf_ffr
-晴天 2011-12-05
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[zf_ffr](
[id] [int] NULL,
[xingming] [varchar](10) ,
[fenshu] [int] NULL,
[lianxi] [varchar](5)
)
insert into zf_ffr values(1,'a',50,'1')
insert into zf_ffr values(2,'aa',80,'1')
insert into zf_ffr values(3,'b',60,'2')
insert into zf_ffr values(4,'bb',90,'2')
insert into zf_ffr values(5,'c',85,'3')
insert into zf_ffr values(6,'cc',30,'3')

select * from zf_ffr a order by (select max(fenshu) from zf_ffr where lianxi=a.lianxi) desc,fenshu desc
/*
id xingming fenshu lianxi
----------- ---------- ----------- ------
4 bb 90 2
3 b 60 2
5 c 85 3
6 cc 30 3
2 aa 80 1
1 a 50 1

(6 行受影响)

*/
go
drop table zf_ffr
zhuyangpeng 2011-12-05
  • 打赏
  • 举报
回复
结果成这样了
5 c 90 3
6 cc 30 3
7 d 80 4
2 aa 80 1
1 a 60 1
8 dd 30 4
4 bb 70 2
3 b 50 2
标志位,4和4应该在一起
zhuyangpeng 2011-12-05
  • 打赏
  • 举报
回复
非常感谢,我在后面又加了两条数据,结果就不对了,麻烦看一下

insert into zf_ffr values(1,'a',50,'1')
insert into zf_ffr values(2,'aa',80,'1')
insert into zf_ffr values(3,'b',60,'2')
insert into zf_ffr values(4,'bb',90,'2')
insert into zf_ffr values(5,'c',80,'3')
insert into zf_ffr values(6,'cc',30,'3')
insert into zf_ffr values(7,'d',80,'4')
insert into zf_ffr values(8,'dd',30,'4')
-晴天 2011-12-05
  • 打赏
  • 举报
回复
那就这样呗:
select * from zf_ffr a order by (select max(fenshu) from zf_ffr where lianxi=a.lianxi) desc,fenshu desc
zhuyangpeng 2011-12-05
  • 打赏
  • 举报
回复
抱歉,没有表达清楚
家庭分是取夫妻两人高分的人
排序时按家庭分从高到低排序
给出低分是为了让分房人更清楚
排名 编号 姓名 分数 标志
1 4,bb,90,2
3,b,60,2
2 5,c,85,3
6,cc,30,3
3 2,aa,80,1
1,a,50,1
-晴天 2011-12-05
  • 打赏
  • 举报
回复
你的结果还是错的,80,50 那一家,比85,30 那家要高!
CREATE TABLE [dbo].[zf_ffr](
[id] [int] NULL,
[xingming] [varchar](10) ,
[fenshu] [int] NULL,
[lianxi] [varchar](5)
)
insert into zf_ffr values(1,'a',50,'1')
insert into zf_ffr values(2,'aa',80,'1')
insert into zf_ffr values(3,'b',60,'2')
insert into zf_ffr values(4,'bb',90,'2')
insert into zf_ffr values(5,'c',85,'3')
insert into zf_ffr values(6,'cc',30,'3')

select * from zf_ffr a order by (select sum(fenshu) from zf_ffr where lianxi=a.lianxi) desc,fenshu desc
/*
id xingming fenshu lianxi
----------- ---------- ----------- ------
4 bb 90 2
3 b 60 2
2 aa 80 1
1 a 50 1
5 c 85 3
6 cc 30 3

(6 行受影响)

*/
go
drop table zf_ffr
zhuyangpeng 2011-12-05
  • 打赏
  • 举报
回复
有没有高手呀?
-晴天 2011-12-05
  • 打赏
  • 举报
回复
你们老师太OUT了!
-晴天 2011-12-05
  • 打赏
  • 举报
回复
这是什么年代的东西,还分房哪!
zhuyangpeng 2011-12-05
  • 打赏
  • 举报
回复
问题已经解决了,非常感谢qianjin036a的帮助

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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