sql 求排名问题

zld_baggio 2009-08-09 02:24:39
我有个表,需要用sql求出排名,排名是根据‘数量’这个字段之和求出的,要求数量之和合名次都显示出来。
...全文
141 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
plglenn 2009-08-09
  • 打赏
  • 举报
回复
d
ws_hgo 2009-08-09
  • 打赏
  • 举报
回复
create table #QQ
(
姓名 varchar(20),
数量合计 int,
部门编号 int
)
insert into #QQ select '刘虹',54,4
union all select '徐文涛',45,4
union all select '张少更',39,7
union all select '徐震',28,5
union all select '宋斌',24,4
union all select '王善明',23,7

select 姓名,数量合计,(select count(*)+1 from #QQ where 数量合计>Q.数量合计) 名次
from #QQ Q
姓名 数量合计 名次
-------------------- ----------- -----------
刘虹 54 1
徐文涛 45 2
张少更 39 3
徐震 28 4
宋斌 24 5
王善明 23 6

(6 行受影响)
ws_hgo 2009-08-09
  • 打赏
  • 举报
回复
你的结果
黄_瓜 2009-08-09
  • 打赏
  • 举报
回复
--2000要用临时表
IF OBJECT_ID('A') IS NOT NULL
DROP TABLE A
go
create table a(姓名 varchar(20),数量合计 int, 部门编号 int)
insert into a select '刘虹', 54, 4
union all select '徐文涛', 45, 4
union all select '张少更', 39, 7
union all select '徐震', 28, 5
union all select '宋斌', 24 ,4
union all select '王善明', 23, 7
union all select '王善明', 33, 7 --为了数量合计的效果更明显
go

if object_id('tempdb..#tb') is not null
drop table #tb
go
select 姓名, sum(数量合计) as 数量合计,部门编号,名次=identity(int, 1,1) into #tb
from a
group by 姓名,部门编号
order by 数量合计 desc

select * from #tb
/*

姓名 数量合计 部门编号 名次
-------------------- ----------- ----------- -----------
王善明 56 7 1
刘虹 54 4 2
徐文涛 45 4 3
张少更 39 7 4
徐震 28 5 5
宋斌 24 4 6

(6 行受影响)
*/
zld_baggio 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ws_hgo 的回复:]
引用 10 楼 zld_baggio 的回复:
引用 8 楼 cpp2017 的回复:
row_number只有sql 2005才有,如果是2000,可以在显示的时候根据记录顺序再加,如果一定要直接在sql中显示,可用临时表,

select * into #temp from 表 order by ...

alter table #temp add index int identity(1,1)
select * from #temp


我用的就是sql2000,之前有个表数量字段是不同的,也不需要合计,所以很轻松就可以实现了,

可是这个表需要的是数量合计,我都快要被折磨疯了!!!

给点测试数据
[/Quote]

姓名 数量合计 部门编号 名次(错误)

刘虹 54 4 1135
徐文涛 45 4 1135
张少更 39 7 1135
徐震 28 5 1135
宋斌 24 4 1135
王善明 23 7 1135
ws_hgo 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zld_baggio 的回复:]
引用 8 楼 cpp2017 的回复:
row_number只有sql 2005才有,如果是2000,可以在显示的时候根据记录顺序再加,如果一定要直接在sql中显示,可用临时表,

select * into #temp from 表 order by ...

alter table #temp add index int identity(1,1)
select * from #temp




我用的就是sql2000,之前有个表数量字段是不同的,也不需要合计,所以很轻松就可以实现了,

可是这个表需要的是数量合计,我都快要被折磨疯了!!!
[/Quote]
给点测试数据
zld_baggio 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cpp2017 的回复:]
row_number只有sql 2005才有,如果是2000,可以在显示的时候根据记录顺序再加,如果一定要直接在sql中显示,可用临时表,

select * into #temp from 表 order by ...

alter table #temp add index int identity(1,1)
select * from #temp

[/Quote]


我用的就是sql2000,之前有个表数量字段是不同的,也不需要合计,所以很轻松就可以实现了,

可是这个表需要的是数量合计,我都快要被折磨疯了!!!
wuyq11 2009-08-09
  • 打赏
  • 举报
回复
select * from (
select ROW_NUMBER() over (order by 数量) as 排名 ,* from 表 )K

http://topic.csdn.net/u/20090315/11/9b841c38-d831-4545-b0ac-31abc4f00db3.html
cpp2017 2009-08-09
  • 打赏
  • 举报
回复
row_number只有sql 2005才有,如果是2000,可以在显示的时候根据记录顺序再加,如果一定要直接在sql中显示,可用临时表,

select * into #temp from 表 order by ...

alter table #temp add index int identity(1,1)
select * from #temp
ws_hgo 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zld_baggio 的回复:]
表结构:
部门,姓名,数量,日期。

仅仅四个字段而已。
[/Quote]
select *,row_number() over(order by cnt) rank from 
(
select 姓名,sum(数量) cnt from 表
) T order by rank
eleven~ 2009-08-09
  • 打赏
  • 举报
回复
用row_number或dense_rank
皓月明 2009-08-09
  • 打赏
  • 举报
回复
顶了
zld_baggio 2009-08-09
  • 打赏
  • 举报
回复
表结构:
部门,姓名,数量,日期。

仅仅四个字段而已。
missukiss02 2009-08-09
  • 打赏
  • 举报
回复
你给个表结构看看容易说啊
zld_baggio 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 missukiss02 的回复:]
select sum('数量') from 表名 order by '数量' ase
[/Quote]

大哥,我的名次呢!!!不是只要数量而已阿!!!
missukiss02 2009-08-09
  • 打赏
  • 举报
回复
select sum('数量') from 表名 order by '数量' ase

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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