Как сгруппировать, чтобы избавиться от дубликатов строк - PullRequest
2 голосов
/ 14 сентября 2011

Как удалить дубликаты из таблицы, где все столбцы значимы, кроме 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 ]

3 голосов
/ 14 сентября 2011

Нашел:

select min(pk), a, b, c 
from @dummy 
group by a, b, c
0 голосов
/ 14 сентября 2011

Вначале я думал, что отдельный будет делать это, но я вполне уверен, что вы хотите, чтобы сгруппировать по:

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

Поскольку существует уникальный первичный ключ, все строки различны.

0 голосов
/ 14 сентября 2011

Вы хотите что-то вроде этого, я думаю:

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-программирование / удаление дубликатов из таблицы в sql-сервере /

...