如何用 SQL 求得某个记录的序号?(50分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
例如,大富翁论坛的用户表有个字段叫 points (积分),
如何写 SQL 查询某个用户按积分排序时,他是处于第几名的位置?
 
坛主,可能要分两个句子,这样行不行:


SELECT POINTS FROM USERTABLE WHERE NAME='xxx';

SELECT COUNT(*) FROM USERTABLE where points > 上面查出的分数;
 
有没有可能用一句 SQL 呢?
 
YYSUN,使用 ORDER 排序和虚拟字段或许简单些
虚拟字段完成的是类似 自增长 ID 的任务
select points from usertable order by points
同时准备一个 虚拟运算字段 result_id
在 tQuery的 OnCalculate 事件里写 给这个字段赋值

var
id : integer

.......
procedure tForm1.form1create(sender);
begin
id:=0;
end;

procedure tform1.Query1Calculate(Sender : ....);
begin
Query1.fieldbyname('result_id').AsInteger:= id+1;
inc(id);
end;

这样操作后, 由于你的QUERY结果集合就是按分数排序的,只是没有
排序的序号,通过生成一个 自增虚拟字段就完成了
也许我说的太罗嗦,其实这方法是我认为最简单的方法了。
Query1.fieldbyname('result_id').AsInteger
 
谢谢,王寒松,可是我想在 ASP 中做。
 
一句好像不行的说
 
可以用以下SQL语句(我在ORACLE下试过通过,这个应该是标准SQL)
SELECT COUNT(*) FROM USERTABLE where points > ( SELECT POINTS FROM USERTABLE WHERE NAME='xxx' )
 
可以用以下SQL语句(我在ORACLE下试过通过,这个应该是标准SQL)
SELECT COUNT(*)+ 1 FROM USERTABLE where points > ( SELECT POINTS FROM USERTABLE WHERE NAME='xxx' )
 
另如果是ORACLE兼容的数据库,
甚至可用如下语句
select rownum from USERTABLE order by USERNAME;
返回的rownum即为序号, rownum是oracle的系统标准"field"
 
如果用计算字段,在grid中应该容易实现。
 
这个论坛是sql server ,也没有grid.........
 
谢谢 hekai,您的方法很灵光 !
 
多人接受答案了。
 
难道是我看错了?

至少在ORACLE中,下面语句有问题,因为它得到的rownum是不对的,
它得到的rownum还是没有排过序时的ROWNUM,根本不是已经排过序的ROWNUM。
也就是说,有没有ORDER BY一个样。
这个问题在ORACLE中我们试验室已经讨论好久了,一直不能解决。
请YYSUN同志仔细看看结果。
select rownum from USERTABLE order by USERNAME;

 
后退
顶部