select * from tb a
where not exists(select 1 from tb where name=a.name and course=a.course and id<a.id)

解决方案 »

  1.   

    select distinct id,name,course from a
      

  2.   

    那要看你想去掉哪个重复的字段了 比如不想让course字段有重复的值就是:
    select distinct course from tablename
    去看看联机帮助
      

  3.   

    create table  #T(id int,name varchar(5),course int)
    insert into #T
    select 1,'hh',80 union all
    select 2,'hh',80 union all
    select 3,'hh',80 
    select * from #TDELETE  from #T
    where [ID] NOT IN 
     (SELECT TOP 1 [ID] FROM #T ORDER BY [ID])
    select * from #T/*(3 row(s) affected)id          name  course      
    ----------- ----- ----------- 
    1           hh    80
    2           hh    80
    3           hh    80(3 row(s) affected)
    (2 row(s) affected)id          name  course      
    ----------- ----- ----------- 
    1           hh    80(1 row(s) affected)
    */
      

  4.   

    delete a where id not in (select min(id) from a group by name,course)
    看看行不?
      

  5.   

    /*
    1.方法一
    可以不用语句
    假设原来的表为Table,A重复则为重复,需要保留一笔即可
    建立一张具有和Table相同结构的临时表myTable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是a,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
    此时SQL Server会返回如下提示:
      服务器: 消息 3604,级别 16,状态 1,行 1
      已忽略重复的键。
      它表明在产品信息临时表myTable中不会有重复的行出现。然后将原表Table清空,并将临时表myTable中数据导入,最后删除临时表myTable。
    这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的A,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!2.如果你是认为要A,B个子段相同才认为是重复,那么你就是组合字段为主键,方法也是如上3.如果非要用语句,用  MorningTea(一勺抹茶)的  ,因为你要key 值,如果没有就自己造一个,用identity(data_type,seed,increment),select到一个临时表,然后删除重复的,然后删除原表所有,然后插入即可