表A、表B完全相同,表A中存学生成绩,如:
表A
ID     学生姓名    课程名称    分数      其它
ID     Sname       Cname       Score      Other
1       张三        语文         88         .
2       张三        数学         97         .
3       张三        数学         98         .
4       李四        语文         84         .
5       李四        语文         88         .
现在要将表A中数据插入表B,要过滤掉一些重复的数据,如张三的数学成绩和李四的语文成功有一条重复数据,只保留分数最高的那一条,ID列为主键自增。过滤后表B的数据为:
表B
ID     学生姓名    课程名称    分数       其它
ID     Sname       Cname       Score      Other
1       张三        语文         88         .
2       张三        数学         98         .
3       李四        语文         88         .

解决方案 »

  1.   

    with tb(id  ,Sname,Cname  , Score , CreateTime ,Other )
    as 
    (select 1, '张三','语文',88,'2010-01-01','' union all
    select  2, '张三','数学',97,'2010-01-01','' union all
     select 3,'张三', '数学',98,'2010-01-01','' union all
     select 4,'李四', '语文',84,'2010-01-01','' union all
    select 5, '李四', '语文', 88,'2010-01-01',''
    )
    select * from tb tb1 where   tb1.Score=
    (select max(Score) from tb tb2 where tb2.Sname=tb1.Sname and tb1.Cname=tb2.Cname)
      

  2.   

    自己总想着Group by和Order by什么的,弄了半天都没弄出来,谢谢!
      

  3.   

    if object_id('tb') is not null
    drop table tb
    create table tb (id varchar(20),sname varchar(20),cname varchar(20),score varchar(20),other varchar(20))
    insert into tb
    select '1','张三','语文','88','' union all
    select '2','张三','数学','97','' union all
    select '3','张三','数学','98','' union all
    select '4','李四','语文','84','' union all
    select '5','李四', '语文', '88',''drop table #1
    select  sname,cname,max(score)as score ,id=identity(int,1,1) into #1 from tb
     group by sname,cname order by sname desc,score
    select * from #1