200分,给您的(200分)

  • 主题发起人 主题发起人 digitalmachine
  • 开始时间 开始时间
D

digitalmachine

Unregistered / Unconfirmed
GUEST, unregistred user!
个学生成绩数据库,有学号、姓名、班级、年级、数学、语文、英语,
用sql语句打印出一个班的学生的 数学成绩、数学班名次、数学级名次、
语文成绩、语文班名次、语文级名次、英语成绩、英语班名次、英语级名次
总分班名次、总分级名次。
sql语句如下:
SELECT id, name, class, grade, maths
,(SELECT COUNT(*) + 1
FROM Table1 b
WHERE b.grade = a.grade AND
b.maths > a.maths) AS mathsGradeIndex
,(SELECT COUNT(*) + 1
FROM Table1 b
WHERE b.class = a.class AND
b.maths > a.maths) AS mathsClassIndex
FROM Table1 a
为什么每个学生的mathsGradeIndex和mathsClassIndex总为1,我用的是Pradox 数据表
 
不知道,但是我觉得你应该统一你在外面的名字和里面的名字,而且,做为传入
子查询的参数,不用两个都区分开来,你可以试一下这样。(这个排名我怎么这么熟啊)

SELECT id, name, class, grade, maths
,(SELECT COUNT(*) + 1
FROM Table1 as b
WHERE b.grade = grade AND
b.maths > maths) AS mathsGradeIndex
,(SELECT COUNT(*) + 1
FROM Table1 as b
WHERE b.class = class AND
b.maths > maths) AS mathsClassIndex
FROM Table1


我不知道在Delphi中怎么使用,但是以纯粹sql语句而言,你应该使用
From Table1 AS A, 而且,既然你使用了From Table1 as a,那么你应该
是 select a.name, .....而不应该仅使用子段明。所以事实上存在两种该法,你自己
试试吧
 
SELECT COUNT(*)
FROM Table1 b
WHERE b.grade = a.grade AND
b.maths > a.maths
看看能返回多少??这样写肯定是不好使的.
每个学生的肯定一样.
 
...from table1 as a,table2 as b
试试看,如果还不行,看来是PARADOX不支持了[:(]
 
参看
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1016377

[:D]
 
那天也是为了你这样的查询把我弄晕了! 呵呵
 
paradox不支持多表查询
 
PARADOX 数据库的问题!~ [:D]

我在SQL_SERVER中试验了一下,你的SQL语句没有问题!
按照mathsGradeIndex (年级名次)和mathsClassIndex(班级名次)能很清楚的把记录列出来!

你执行不成功的原因可能是因为 PARADOX 数据库不支持这样的查询方式 --------
SELECT COUNT(*) + 1
FROM Table1 b
WHERE b.class = a.class AND b.maths > a.maths) AS mathsClassIndex

-------------
估计只能改用其他的数据库了!
或者用PARADOX 数据库很难实现你的查询要求! 另外打造SQL来写了~ [:(]
 
[b.grade = a.grade AND b.maths > a.maths]
这个条件就能查出名次?不会吧?
 
问题找到了,原来Pradox不支持多表查询,
如果还用Pradox表,那该怎样做!
谢谢各位!
 
换库吧,除了速度,Paradox似乎一无是处,还需要你另外加BDE。
用Acess作数据库吧,很好使
 
使用内存表,将SQL语句分别将汇总结果存入内存表
 
可以用ORACLE,或者是用SQL SERVER,ORACEL支持的功能很多
 
jrq好人啊[:)]
 
你居然用paradox,扔到一边去吧,paradox真是不好使,索引容易出问题。查询的时候也不利索
换用别的数据库吧!难道你对BDE很钟爱吗?
 
我想知道使Prodax数据库该怎样做
 
后退
顶部