查询某一条记录在表中排序后的位置

ningweidong 2011-08-02 02:43:48
比如说,有一个成绩表,两个字段,学号和成绩
我成查询分析器执行
select no,socre from table order by socre desc
我在查询分析器里可以很清楚地看到每条记录,以及他们排序之后在表中的位置。
我现在想根据学号,就查到这条记录所在的名次
select no,socre from table where no='001'
这样查确实可以查到,但是我还想看到该条记录在表中排序后的位置,应该怎么看?
如果在程序中,我可以通过编程的方法确定该条记录所处的位置,
我想问一下,有没有简单一点的方法,比如,只写sql 语句可以完成这个功能吗?
...全文
292 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chtzhking 2011-08-02
  • 打赏
  • 举报
回复


drop table tb
CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
INSERT tb SELECT 'aa',99
UNION ALL SELECT 'bb',56
UNION ALL SELECT 'cc',56
UNION ALL SELECT 'dd',77
UNION ALL SELECT 'ee',78
UNION ALL SELECT 'ff',76
UNION ALL SELECT 'gg',78
UNION ALL SELECT 'ff',50
GO

---当分数相同时,合并名次
SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
FROM tb a
--WHERE NAME='001'
ORDER BY Place

---当分数相同时,保留名次空缺
SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1
FROM tb a
--WHERE NAME='001'
ORDER BY Place

---------------------
Name Score Place
---------- --------------------------------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 3
ff 76.00 4
bb 56.00 5
cc 56.00 5
ff 50.00 6

(8 行受影响)

Name Score Place
---------- --------------------------------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 4
ff 76.00 5
bb 56.00 6
cc 56.00 6
ff 50.00 8

(8 行受影响)
ningweidong 2011-08-02
  • 打赏
  • 举报
回复
我用的数据库是2000,在这个版本下有没有好办法?
勿勿 2011-08-02
  • 打赏
  • 举报
回复
学习了
快溜 2011-08-02
  • 打赏
  • 举报
回复
排序函数。
AcHerat 元老 2011-08-02
  • 打赏
  • 举报
回复
2000可以用临时表来获取排序。


select *,px=identity(int,1,1)
into #tb
from tb
order by score desc

select *
from #tb
where no = '001'
xuam 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maco_wang 的回复:]
SQL code
select row_number() over (order by socre desc) as 名次, no,socre
from table where no='001' order by socre desc
[/Quote]

sql2005版本以上才可以用这个

sql2000你用个自增字段吧.
水族杰纶 2011-08-02
  • 打赏
  • 举报
回复
用几个排序函数
先排序
然后对排序后的临时表进行条件查询
AcHerat 元老 2011-08-02
  • 打赏
  • 举报
回复
可以,楼主可以做个序号列!


select *
from (
select *,px=row_number() over (order by score desc)
from [table]
)
where no = '001'
勿勿 2011-08-02
  • 打赏
  • 举报
回复
有点不明白LZ的意思。。
叶子 2011-08-02
  • 打赏
  • 举报
回复
select row_number() over (order by socre desc) as 名次, no,socre 
from table where no='001' order by socre desc

34,837

社区成员

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

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