Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск дублей по ключу и сравнение значений в строках  [new]
Genniy
Member

Откуда:
Сообщений: 141
Привет!

Ребята, есть одна таблица с 10 полями. Необходимо найти дубликаты записей по ключу, например, одной из колонок (допустим Number).
После этого оставить только ту запись, у которой больше всего заполнено полей.

Дубликаты записей найти нет проблемы, а вот как бы грамотно сравнить две записи по заполнению и выбрать ту запись, в которой больше всего заполнено полей.

Есть решение. Но оно мне не очень нравиться, т.к. необходимо прописывать названия полей руками. Хотелось бы что-то более гибкое. Да, можно формировать текст запроса динамически,

CREATE TABLE Test(Code INT, NAME NVARCHAR(25), email NVARCHAR(50), DESCRIPTION NVARCHAR(200))

INSERT INTO Test
VALUES (1, 'Name1', 'email1', 'description1')


INSERT INTO Test
VALUES (2, 'Name2', null, 'description2')

SELECT
Code + Name + email + [DESCRIPTION]
from
(
SELECT
CASE
WHEN (len(Code) > 0) THEN
1
ELSE
0
END Code,
CASE
WHEN (len(Name) > 0) THEN
1
ELSE
0
END Name,
CASE
WHEN (len(email) > 0) THEN
1
ELSE
0
END email,
CASE
WHEN (len(DESCRIPTION) > 0) THEN
1
ELSE
0
END [DESCRIPTION]
FROM Test
) S

DROP TABLE Test
8 июл 13, 19:30    [14538266]     Ответить | Цитировать Сообщить модератору
 Re: Поиск дублей по ключу и сравнение значений в строках  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
declare @table table (ID int , field1 varchar(10),field2 varchar(10),field3 varchar(10))
insert into @table values(1,'dgdg','jdjdj','rwrwr'),(1,'dgdg',null,'rwrwr'),(1,null,null,'rwrwr'),(2,null,null,'rwrwr')
-- c дубликатами
select * from @table

-- без дубликатами
select top 1 with ties * 
from @table as t
order by ROW_NUMBER() OVER (PARTITION BY id ORDER BY (select t.* for xml path(''), type).value('count(*)','int') DESC)
9 июл 13, 13:35    [14540987]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить