select a.学号,a.姓名,a.语文 as [语文(a表)],b.语文 as [语文(b表)],(select count(*)+1 from A表 where 语文<a.语文) as 名次1,(select count(*)+1 from B表 where 语文<b.语文) as 名次2 from A表 a,B表 b where a.学号=b.学号 order by a.语文

解决方案 »

  1.   

    select a.学号 学号(a表),a.姓名 姓名(a表),a.语文 语文(a表),b.语文 语文(b表),(select count(1)+1 from a表 where 语文<a.语文) 名次1(a表中的名次),(select count(1)+1 from b表 where 语文<b.语文) 名次2(b表中的名次) from a表 a left join b表 on a.学号=b.学号
      

  2.   

    是以什么为关健字呢?学号吗?
    select a.学号,a.姓名,a.语文,a.数学,a.名次,b.名次 from a LEFT JOIN b ON b.学号=a.学号 GROUP BY a.学号;
    试一下可以吗?我用mysql时没有问题的
      

  3.   

    select a.学号,a.姓名,a.语文,b.语文,(select count(*)+1 from a tem1 where tem1.语文<a.语文) 名次1,(select count(*)+1 from b tem2 where tem2.语文<b.语文) 名次2 from A left join B on a.学号=b.学号
      

  4.   

    select a.学号,a.姓名,a.语文,b.语文,(select count(*)+1 from a tem1 where tem1.语文<a.语文) 名次1,(select count(*)+1 from b tem2 where tem2.语文<b.语文) 名次2 from A left join B on a.学号=b.学号
      

  5.   

    select [学号(a表)]=a.学号
    ,[姓名(a表)]=a.姓名
    ,[语文(a表)]=a.语文
    ,[语文(b表)]=b.语文
    ,[名次1(a表中的名次)]=a.名次
    ,[名次2(b表中的名次)]=b.名次
    from(
    select 学号,姓名,语文,数学
    ,名次=(select sum(1) from a表 where 语文+数学>=a.语文+a.数学)
    from a表 a) a left join(
    select 学号,姓名,语文,数学
    ,名次=(select sum(1) from a表 where 语文+数学>=a.语文+a.数学)
    from b表 a) b on a.学号=b.学号
      

  6.   

    如果兩個表人數不同,A表有的人B表沒有,B表有的人A表沒有,可以這樣做:select (case when isnull(a.学号,0)=0 then b.学号 else b.学号 end) as 学号,(case when isnull(a.姓名,0)=0 then b.姓名 else b.姓名 end) as 姓名,a.语文,b.语文,(select count(*)+1 from a tem1 where tem1.语文<a.语文) 名次1,(select count(*)+1 from b tem2 where tem2.语文<b.语文) 名次2 from A full join B on a.学号=b.学号
      

  7.   

    忘了说了:
    第一这两个表是属于两个不同的文件中即A文件中有表a,B文件中有表b
    第二我是想用VB+ado来做不知能不能写出来!
    第三名次是指单学科的名次,即单指语文的名次,不是语文+数学的名次!不知现在有没有说清楚,不过先谢谢大家的指点!
      

  8.   

    select a.学号,a.姓名,a.语文,b.语文,(select count(*)+1 from a tem1 where tem1.语文<a.语文) 名次1,(select count(*)+1 from b tem2 where tem2.语文<b.语文) 名次2 from A left join B on a.学号=b.学号