create table aaatest
(
aaa  int,
bbb  int,
ccc  varchar(20)
)
goinsert into aaatest values(1,2,null)
insert into aaatest values(1,2,null)
insert into aaatest values(1,3,null)
insert into aaatest values(1,4,null)
insert into aaatest values(2,2,null)
insert into aaatest values(2,3,null)
insert into aaatest values(2,3,null)select aaa,max(bbb),ccc
from 
(select * from aaatest
group by aaa,bbb,ccc
having count(1)>0 ) a
group by aaa,ccc

解决方案 »

  1.   

    如果可以新生成一个表当然好做啦,而且不用你这怎麻烦吧,还要insert那么多句,如果那不只这些条记录,有一百条记录启不是要insert一百句了吗?这种方法不好。
      

  2.   

    create table aaatest
    (
    aaa  int,
    bbb  int,
    ccc  varchar(20)
    )
    goinsert into aaatest values(1,2,null)
    insert into aaatest values(1,2,null)
    insert into aaatest values(1,3,null)
    insert into aaatest values(1,4,null)
    insert into aaatest values(2,2,null)
    insert into aaatest values(2,3,null)
    insert into aaatest values(2,3,null)select * from aaatestselect distinct * from aaatest O where bbb in 
    (select max(bbb) from aaatest where aaa=O.aaa)
    -测试结果
    1 4 NULL
    2 3 NULL
      

  3.   

    大家没有理解我底意思,
    查询来说 smalldeer(晓露的方法是对的,
    但是问题我不想把结果取出来,因为记录太多,几十万条,而是直接删除,除
    1 4 NULL
    2 3 NULL
    以为的记录
      

  4.   

    大家没有理解我底意思,
    查询来说 smalldeer(晓露的方法是对的,
    但是问题我不想把结果取出来,因为记录太多,几十万条,而是直接删除,除
    1 4 NULL
    2 3 NULL
    以外的记录
      

  5.   

    select distinct * into #a from eee O where bbb in 
    (select max(bbb) from eee where aaa=O.aaa)
    delete from eeeinsert into eee
    select * from #adrop table #a
      

  6.   

    select aaa,max(bbb),ccc
    from 表名
    group by aaa,ccc
      

  7.   

    --删除
    delete a 
    from eee a left join(
    select aaa,bbb=max(bbb)
    from eee
    group by aaa
    )b on a.aaa=b.aaa and a.bbb=b.bbb
    where b.bbb is null
      

  8.   

    --或者:
    delete a 
    from eee a 
    where bbb<>(
    select max(bbb)
    from eee
    where aaa=a.aaa)
      

  9.   

    zjcxc(邹建) ( ) 
    的方法删不掉
    1 4 NULL
    2 3 NULL
    2 3 NULL结果是:
      

  10.   

    pisces007(蝶鱼)的方法可以...不过比较麻烦...谁有更好的?
      

  11.   

    其实你要得到的结果有两个要求
    1。删除重复底记录,
    2。再留下按aaa分组,bbb最大底记录第二个好办,但你的重复记录是完全重复的
      这样的重复记录最好用的就是
      select distinct * into #a from eee 
    delete from eee
    insert into eee
    select * from #a
    drop table #a
      

  12.   

    create table aaatest(aaa  int,bbb  int,ccc  varchar(20))
    insert into aaatest values(1,2,null)
    insert into aaatest values(1,2,null)
    insert into aaatest values(1,3,null)
    insert into aaatest values(1,4,null)
    insert into aaatest values(2,2,null)
    insert into aaatest values(2,3,null)
    insert into aaatest values(2,3,null)
    go--删除处理
    alter table aaatest add id int identity(1,1)
    godelete a 
    from aaatest a left join(
    select id=max(id) from aaatest a join(
    select aaa,bbb=max(bbb)
    from aaatest group by aaa
    )b on a.aaa=b.aaa and a.bbb=b.bbb
    group by b.aaa,b.bbb
    )b on a.id=b.id
    where b.id is null
    goalter table aaatest drop column id
    go--显示删除处理结果
    select * from aaatest
    go--删除测试
    drop table aaatest/*--测试结果aaa         bbb         ccc                  
    ----------- ----------- -------------------- 
    1           4           NULL
    2           3           NULL(所影响的行数为 2 行)--*/