有两表:
a表,成绩表1
学号 姓名 语文 数学b表,成绩表2
学号 姓名 语文 数学现在要对这两个成绩表进行对比得出这样的一个结果:
学号(a表) 姓名(a表) 语文(a表) 语文(b表) 名次1(a表中的名次) 名次2(b表中的名次)这个sql语句如何写?(注两个表的人数可能会不一样,不过以a表为准)
a表,成绩表1
学号 姓名 语文 数学b表,成绩表2
学号 姓名 语文 数学现在要对这两个成绩表进行对比得出这样的一个结果:
学号(a表) 姓名(a表) 语文(a表) 语文(b表) 名次1(a表中的名次) 名次2(b表中的名次)这个sql语句如何写?(注两个表的人数可能会不一样,不过以a表为准)
select a.学号, a.姓名, a.语文, b.语文, (select count(学号) from 成绩表1 where 语文 > a.语文)+1 as 名次1 , (select count(学号) from 成绩表2 where 语文 > b.语文)+1 as 名次2
from 成绩表1 a
left outer join 成绩表2 b
where a.学号 = b.学号
===>
on a.学号 = b.学号
(select count(学号) from 成绩表2 where 语文 > b.语文)+1 as 名次2
不一定存在,因为b.语文可能为null,此时名次2应为null,而不是1.
或者改为
(case b.语文 when null then null else (select count(学号) from 成绩表2 where 语文 > b.语文)+1 ) as 名次2
上述只用于SQLServer语法也许有误懒的查资料了,access可用iif表达式,
,a.姓名 as [姓名(a表)]
,a.语文 as [语文(a表)]
,b.语文 as [语文(b表)]
,a.名次 as [名次1(a表中的名次)]
,b.名次 as [名次2(b表中的名次)]
from(
select 学号,姓名,语文,数学
,(select count(*) from a表 where 语文+数学>=a.语文+a.数学) as 名次
from a表 a) a left join(
select 学号,姓名,语文,数学
,(select count(*) from a表 where 语文+数学>=a.语文+a.数学) as 名次
from b表 a) b on a.学号=b.学号
第一这两个表是属于两个不同的文件中即A文件中有表a,B文件中有表b
第二我是想用VB+ado来做不知能不能写出来!
第三名次是指单学科的名次,即单指语文的名次,不是语文+数学的名次!不知现在有没有说清楚,不过先谢谢大家的指点!
1、用ADO生成一个新的数据库,把这两个文件中的表连接到其中,在两个新表中执行查询。表达式请稍候……
2、分别用ADO连接这两个数据,把两个表中的数据读入内存,然后编一个过程,进行排序然后显示。代码请稍候……