很简单的统计排名,很简单。谢谢您的热心帮助

zhaoliangpat 2010-03-31 09:44:21
ID 名称 分数

1 小丽 15
2 小明 20
3 小强 20
4 小张 10
5 小闯 15


要求统计排名之后:

排名 姓名 分数

1 小明 20
1 小强 20
2 小闯 15
2 小丽 15
3 小张 10


简单化就是分数一样的人,要求并列排名!!!!
...全文
138 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoliangpat 2010-03-31
  • 打赏
  • 举报
回复
不可以。

strSQL="select (select count(distinct Fs) from Khpm where Fs>=a.Fs) as 排名,名称,分数 from Khpm a order by 排名"

数据库明细

ID DW FS

说明:DW就是单位名称 FS 就是分数
SoftwKLC 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zhaoliangpat 的回复:]
Access下一样吗?有错误啊
[/Quote]

Access用上面2000的语句试试看!
zhaoliangpat 2010-03-31
  • 打赏
  • 举报
回复
Access下一样吗?有错误啊
SoftwKLC 2010-03-31
  • 打赏
  • 举报
回复

--按分数降序
--建立表
create table tb(ID int,名称 varchar(10),分数 int)
insert tb
select 1, '小丽', 15
union all select 2, '小明', 20
union all select 3, '小强', 20
union all select 4, '小张', 10
union all select 5, '小闯', 15

--sql 2005 SQL
select 排名=dense_rank() over(order by 分数 desc),名称,分数 from tb

drop table tb
--结果
/*
排名 名称 分数
-------------------- ---------- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)
*/
仙道彰 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yanguoliusheng 的回复:]
引用 6 楼 yanguoliusheng 的回复:
SQL code
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([ID] int,[名称] varchar(4),[分数] int)
insert [tb]
select 1,'小丽',15 union all
se……
[/Quote]
不过FC说了这样写效率
zhaoliangpat 2010-03-31
  • 打赏
  • 举报
回复
如果在ACCESS下呢。应该怎么写。我两个数据库都需要,谢谢你们
bancxc 2010-03-31
  • 打赏
  • 举报
回复


----2000的

create table tb(ID int , 名称 varchar(10),分数 int)
go

insert into tb select
1 ,'小丽', 15 union all select
2 ,'小明', 20 union all select
3 ,'小强', 20 union all select
4 ,'小张',10 union all select
5 ,'小闯', 15

select (select count(distinct 分数) from tb where 分数>=a.分数) as 排名,名称,分数
from tb a order by 排名


排名 名称 分数
----------- ---------- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)


--drop table tb
SoftwKLC 2010-03-31
  • 打赏
  • 举报
回复

--建立表
create table tb(ID int,名称 varchar(10),分数 int)
insert tb
select 1, '小丽', 15
union all select 2, '小明', 20
union all select 3, '小强', 20
union all select 4, '小张', 10
union all select 5, '小闯', 15

--sql 2005 SQL
select 排名=dense_rank() over(order by 分数),名称,分数 from tb

drop table tb
--结果
/*
排名 名称 分数
-------------------- ---------- -----------
1 小张 10
2 小闯 15
2 小丽 15
3 小明 20
3 小强 20
*/
zhaoliangpat 2010-03-31
  • 打赏
  • 举报
回复
语法错误 (操作符丢失) 在查询表达式 'dense_rank() over(order by [分数])' 中。
SoftwKLC 2010-03-31
  • 打赏
  • 举报
回复

select 排名=dense_rank() over(order by 分数),名称,分数 from table
东那个升 2010-03-31
  • 打赏
  • 举报
回复
--2000

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[名称] NVARCHAR(10),[分数] INT)
INSERT [tb]
SELECT 1,N'小丽',15 UNION ALL
SELECT 2,N'小明',20 UNION ALL
SELECT 3,N'小强',20 UNION ALL
SELECT 4,N'小张',10 UNION ALL
SELECT 5,N'小闯',15
GO

select (select count(distinct 分数) from tb where 分数>=a.分数) as 排名,名称,分数
from tb a
htl258_Tony 2010-03-31
  • 打赏
  • 举报
回复
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[名称] NVARCHAR(10),[分数] INT)
INSERT [tb]
SELECT 1,N'小丽',15 UNION ALL
SELECT 2,N'小明',20 UNION ALL
SELECT 3,N'小强',20 UNION ALL
SELECT 4,N'小张',10 UNION ALL
SELECT 5,N'小闯',15
GO
--SELECT * FROM [tb]

-->SQL查询如下:
--2000
select id=(select count(distinct [分数])+1 from tb where [分数]>a.[分数]),[名称],[分数]from [tb] a order by id

/*
排名 名称 分数
-------------------- ---------- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)
*/
SQL2000要这样
仙道彰 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yanguoliusheng 的回复:]
SQL code
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([ID] int,[名称] varchar(4),[分数] int)
insert [tb]
select 1,'小丽',15 union all
select 2,'小明',20 union all
se……
[/Quote]
修改, 2000的错了
--2000
select id=(select count(distinct [分数])+1 from tb where [分数]>a.[分数]),[名称],[分数]from [tb] a order by id
--小F-- 2010-03-31
  • 打赏
  • 举报
回复
count(distinct)...
--小F-- 2010-03-31
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-03-31 09:49:50
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[名称] varchar(4),[分数] int)
insert [tb]
select 1,'小丽',15 union all
select 2,'小明',20 union all
select 3,'小强',20 union all
select 4,'小张',10 union all
select 5,'小闯',15
--------------开始查询--------------------------
select
排名=(select count(distinct 分数 )+1 from tb where t.分数<分数),
名称,分数
from
tb t
order by
1

----------------结果----------------------------
/* 排名 名称 分数
----------- ---- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)

*/
bancxc 2010-03-31
  • 打赏
  • 举报
回复
create table tb(ID int , 名称 varchar(10),分数 int)
go

insert into tb select
1 ,'小丽', 15 union all select
2 ,'小明', 20 union all select
3 ,'小强', 20 union all select
4 ,'小张',10 union all select
5 ,'小闯', 15

select dense_rank() over(order by [分数] desc) as 排名,名称,分数
from tb


排名 名称 分数
-------------------- ---------- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)


--drop table tb
仙道彰 2010-03-31
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([ID] int,[名称] varchar(4),[分数] int)
insert [tb]
select 1,'小丽',15 union all
select 2,'小明',20 union all
select 3,'小强',20 union all
select 4,'小张',10 union all
select 5,'小闯',15

--2005
select id=dense_rank() over(order by[分数] desc ) ,[名称],[分数]from [tb] order by id
--2000
select id=(select count(1)+1 from tb where [分数]>a.[分数]),[名称],[分数]from [tb] a order by id
/*
id 名称 分数
----------- ---- -----------
1 小明 20
1 小强 20
3 小丽 15
3 小闯 15
5 小张 10

(5 行受影响)

*
/
bancxc 2010-03-31
  • 打赏
  • 举报
回复
create table tb(ID int , 名称 varchar(10),分数 int)
go

insert into tb select
1 ,'小丽', 15 union all select
2 ,'小明', 20 union all select
3 ,'小强', 20 union all select
4 ,'小张',10 union all select
5 ,'小闯', 15

select dense_rank() over(order by [分数]) as 排名,名称,分数
from tb

排名 名称 分数
-------------------- ---------- -----------
1 小张 10
2 小闯 15
2 小丽 15
3 小明 20
3 小强 20

(5 行受影响)

--drop table tb
dense_rank 记错了
ACMAIN_CHM 2010-03-31
  • 打赏
  • 举报
回复
select (select count(*) from (select distinct 分数 from tb) where 分数>=a.分数) as 排名,名称,分数
from tb a
htl258_Tony 2010-03-31
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-03-31 09:47:57
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[名称] NVARCHAR(10),[分数] INT)
INSERT [tb]
SELECT 1,N'小丽',15 UNION ALL
SELECT 2,N'小明',20 UNION ALL
SELECT 3,N'小强',20 UNION ALL
SELECT 4,N'小张',10 UNION ALL
SELECT 5,N'小闯',15
GO
--SELECT * FROM [tb]

-->SQL查询如下:
SELECT 排名=DENSE_RANK()OVER(ORDER BY [分数] DESC),
名称,分数
FROM TB
/*
排名 名称 分数
-------------------- ---------- -----------
1 小明 20
1 小强 20
2 小丽 15
2 小闯 15
3 小张 10

(5 行受影响)
*/
加载更多回复(3)

22,209

社区成员

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

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