课程号 学号         学期       重补修说明 课程性质   成绩
430116 200811401 2007-2008-2 必修     0
430116 200811401 2007-2008-2 必修     0
110016 200811401 2008-2009-1 重修  必修     0
110016 200811401 2007-2008-2 必修     0
210001 200811401 2007-2008-2 补考 必修     69
810005 200811401 2007-2008-2 专业选修     0
400132 200811401 2008-2009-1 必修     75
430089 200811401 2008-2009-1 公共选修     60
如上面所示,相同课程号 相同考试成绩取一条记录,如 1 根2,重补修不为空的,取重补修不为空的记录。如3根4
上面的数据筛选之后如下所示
课程号 学号         学期       重补修说明 课程性质   成绩
430116 200811401 2007-2008-2 必修     0
110016 200811401 2008-2009-1 重修  必修     0
210001 200811401 2007-2008-2 补考 必修     69
810005 200811401 2007-2008-2 专业选修     0
400132 200811401 2008-2009-1 必修     75
430089 200811401 2008-2009-1 公共选修     60
就是去掉相同课程号,相同数据的重复的记录。
请教sql语句的写法。

解决方案 »

  1.   

    select 课程号,学号,学期,重补修说明,课程性质,成绩 
    from 
    (select t.*,row_number() over(partition by 课程号,学号 order by 课程号,学号) rn from tb)
    where rn=1
      

  2.   

    select 课程号,学号,学期,重补修说明,课程性质,成绩 
    from 
    (select 课程号,学号,学期,重补修说明,课程性质,成绩,row_number() over(partition by 课程号,学号 
    order by 重补修说明) rn from tb) 
    where rn=1
      

  3.   

    select 课程号 ,学号 , 学期 , 重补修说明 , 课程性质 , 成绩 from
    (
      select t.* , row_number() over(partition by 课程号 , 学号 order by 课程号 , 学号 , 课程性质 desc) px from tb t
    ) m
    where px = 1
      

  4.   

    我用的是rowid,解决 了,谢谢各位