select a.学号, a.姓名, a.语文, b.语文, (select count(学号) from a where 语文 > a.语文)+1 as 名次 from a right jion ...
按以上的语句,在ado+access+vb6+sp5中运行后发现,所有的名次等于1,也就是说(select count(学号) from a where 语文 > a.语文)+1 as 名次1  没有起作用,错在哪?如何改,谢谢!

解决方案 »

  1.   

    select count(学号) from a where 语文 > a.语文这句什么意思,既然是from a,那么怎么又语文 > a.语文?你到底要查什么样的记录?
      

  2.   

    因为a.语文不可能大于a.语文,所以符合条件的记录数总是0,用count算当然也是0,你又给它加了1,那当然每次都是1了
      

  3.   

    select count(学号) from a where 语文 > a.语文
    肯定沒有符合條件的那么出來就是0
    0+1當然一直都是1
      

  4.   


        (select count(学号) from a t where 语文 > a.语文)+1 as 名次  --加了一个别名。
      

  5.   

    补充一下:
    我的目的是对两个成绩表进行对比,
    表a结构是: 学号 姓名  语文
    表b结构是: 学号 姓名  语文想生成以下新表:学号 姓名  a.语文 名次1 b.语文 名次2
    其中名次1是指该学生的语文成绩在表a中的名次,名次2是指该学生的语文成绩在表b中的名次.
    环境:vb6+sp5+ado+access
     
      

  6.   

    select a.学号, a.姓名, a.语文, b.语文, 
          (select count(学号) from a where 语文 > b.语文)+1 as 名次 
    from a right jion a as b ....
      

  7.   

    select a.学号, a.姓名, a.语文, b.语文, 
          (select count(学号) from a where 语文 > b.语文)+1 as 名次 
    from a right jion b ....
      

  8.   

    select m.学号,m.姓名,m.语文,m.名次1,n.名次2
    from(
    select 学号, 姓名, 语文,(select count(*)+1 as 名次1 from a where 语文 > t1.语文) from a as t1
    ) as m,
    (select 学号,(select count(*)+1 as 名次2 from a where 语文 > t2.语文) from b as t2) as n
    where m.学号=n.学号
      

  9.   

    用复杂的嵌套 SQL 语句效率未必很高,不妨:DROP TABLE temp_1
    DROP TABLE temp_2CREATE TABLE temp_1 (学号 TEXT,姓名 TEXT, 语文 SHORT, 名次1 COUNTER)
    CREATE TABLE temp_2 (学号 TEXT,姓名 TEXT, 语文 SHORT, 名次2 COUNTER)INSERT INTO temp_1 SELECT * FROM a ORDER BY 语文 DESC
    INSERT INTO temp_2 SELECT * FROM b ORDER BY 语文 DESCSELECT a.学号, a.姓名, a.语文, 名次1, b.语文, 名次2 FROM temp_1 AS a, temp_2 AS b WHERE a.学号 = b.学号 OPDER BY a.学号