学生分数表,和学生信息表,连接后,得出科目 分数 学生ID 身高
化学 80 001 169
数学 90 001 169假设这是一个视图(或现在的表),叫学生视图在这个视图上搜,一个学生只显示一条结果。在选择哪条的策略上,可以采用,找出任意一条该学生的就行。化学 80 001 169也可以采用,找到分数最高的一条。数学 90 001 169

解决方案 »

  1.   


    SELECT * FROM 学生视图 AS T
    WHERE (SELECT COUNT(1) FROM 学生视图 AS B WHERE B.学生ID = T.学生ID AND B.分数 > T.分数) < 1
      

  2.   

    select * from tb t where 分数=(select max(分数) from tb where 学生ID=t.学生ID)
      

  3.   


    select * from tbl a 
    where not exists(select 1 from tbl b where a.学生ID=b.学生Id and a.score<b.score)
      

  4.   


    楼上三种方法都是啊。你随便选一种:
    还有就是:select * from(
    select *,
    px=row_number()over(partition by ID order by score desc) from tbl )t
    where px=1
      

  5.   

    三位的方法好像都是跟分数有关的,我还想要一种,跟分数没关的,类似top 1,随便哪一条都行的。
      

  6.   


    select * from(
    select *,
    px=row_number()over(partition by ID order by newid()) from tbl )t
    where px=1
      

  7.   


       这样好像不行,因为上面的语句中查询出来的px全为1,所以,查询效果相当于WHERE 1=1,也就是条件判断失效了,能不能改进一下呢?