如何分组来摆脱重复的行

时间:2011-09-14 00:45:51

标签: sql group-by distinct

如何从表中删除重复项,其中除PK之外的所有列都很重要。

declare @dummy table
(
   pk int,
   a char(1),
   b char(1),
   c char(1)
)

insert into @dummy 
select 1, 'A', 'B', 'B' union all
select 2, 'A', 'B', 'B' union all
select 3, 'P', 'Q', 'R' union all
select 4, 'P', 'Q', 'R' union all
select 5, 'X', 'Y', 'Z' union all
select 6, 'X', 'Y', 'Z' union all
select 7, 'A', 'B', 'Z' 

我得到的区别是:

select * from @dummy

pk          a    b    c
----------- ---- ---- ----
1           A    B    B
2           A    B    B
3           P    Q    R
4           P    Q    R
5           X    Y    Z
6           X    Y    Z
7           A    B    Z

我想要的是:

select ... do magic ....

pk          a    b    c
----------- ---- ---- ----
1           A    B    B
3           P    Q    R
5           X    Y    Z
7           A    B    Z

3 个答案:

答案 0 :(得分:3)

找到它:

select min(pk), a, b, c 
from @dummy 
group by a, b, c

答案 1 :(得分:0)

你想要这样的东西,我想:

DELETE FROM f
FROM @dummy AS f INNER JOIN @dummy AS g
     ON g.data = f.data
          AND f.id < g.id

查看此文章:http://www.simple-talk.com/sql/t-sql-programming/removing-duplicates-from-a-table-in-sql-server/

答案 2 :(得分:0)

起初,我认为不同会做,但我很确定你想要的是分组:

select * from @dummy group by a,b,c

由于存在唯一的主键,因此所有行都是不同的。