名次排列的问题(200分)

  • 主题发起人 主题发起人 ljbXS
  • 开始时间 开始时间
lvxq,先支付50
http://www.delphibbs.com/delphibbs/dispq.asp?LID=942430





 
最最新战况,2002-02-27 午前 
到现在为止,全部搞定

select a.姓名,a.课程,a.成绩,a.总分
(
select count(*)+1 from 档案
where 档案.课程=a.课程
and 档案.成绩>a.成绩
) as 名次
From 档案 as a
Where 姓名='王五'

在程序中代替相应的字段,然后 把最后一句话换成
Where 姓名=:IndexName
再在程序中输入
Query1.sql.clear;
Query1.sql.add( 上面的话)
Query1.ParamByName('IndexName').value:=Edit1.Text
Query1.open
返回的全部纪录就可以了

 
lvxq及各位大侠
请看
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=940435
这里
 
lvxq
为何我不能运行。好象到
select a.姓名,a.课程,a.成绩,a.总分
(select
这错

 
select a.ename,a.eclass,a.escore,
( select count(*)+1 from myscore
where myscore.eclass=a.eclass and myscore.escore>a.escore
) as turn
From myscore as a
Where ename=:Myname
哦,我知道了,你上面那总分后面还应该有个逗号啊,另外注意,别在
sql语句中使用全角的字符,比如全角的空格,否则你太难查出来了
我上面的话是因为我的字段名和表名不一样,你可以自己该
你可以把整个sql语句事先写在你的Query控件中,在实际调用时只要
Query.Close;
Query.ParamByName('MyName').asString := Edit1.Text ;
Query.Open;
就OK了

 
lvxq
谢谢你!
可以了,
我等下在结束这贴了;
200是你的。能讲讲
select count(*)+1 from myscore
where myscore.eclass=a.eclass and myscore.escore>a.escore
) as turn
这代码的运行过程和意思。
 
能讲讲
select count(*)+1 from myscore
where myscore.eclass=a.eclass and myscore.escore>a.escore
) as turn
这代码的运行过程和意思
 
啊????
我写了半天有丢了,生气,
以上的代码只是生成一个名次,但就代码而言,它其实也是一段完整的查询
SQL把这种叫子查询,在这个子查询种,统计整个库中所有满足条件的纪录个数
就是, (1)指定科目,比如数学,
(2)指定科目的成绩 比当前要排名的人的成绩大
最后加上1,是指确切的名次
 
我做了一下实验, 这段代码通过了,
意思是同一课程的,而且分数比当前记录大的记录数。
我原来写的忘了同一课程。
 
后退
顶部