powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление дубликатов
20 сообщений из 20, страница 1 из 1
Удаление дубликатов
    #39926321
Tenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть таблица вида

id | name | surname
--------------------
1 | niko | L
2 | inna | B
1 | niko | L
3 | jane | A
3 | jane | A
4 | katy | S
5 | ivan | J
6 | inna | X

В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
Т.е. результат такой:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J

Возможно ли сделать это с помощью distinct?
Если нет, какие еще есть варианты?
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926325
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый:

ROW_NUMBER()
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926327
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tenya
Добрый день.

Есть таблица вида

id | name | surname
--------------------
1 | niko | L
2 | inna | B
1 | niko | L
3 | jane | A
3 | jane | A
4 | katy | S
5 | ivan | J
6 | inna | X

В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
Т.е. результат такой:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J

Возможно ли сделать это с помощью distinct?
Если нет, какие еще есть варианты?



Если удаляем дубликаты по id, то куда подевалась уникальная 6 | inna | X в итоговом рекордсете ?
Вы точно описываете проблему ?
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926328
Tenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint, проблема описана верно, а вот при написании результата промашка вышла. Спасибо за замечание.

Итог такой должен быть:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J
inna | X
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926334
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenya,

селект дубли в таблицу хэвинг счетчик > 1
удалить top (1) где индекс в таблице дублей
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926336
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tenya,

или
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH a (id, [name], surname) AS 
(
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 2, 'inna', 'B' UNION ALL
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 4, 'katy', 'S' UNION ALL
    SELECT 5, 'ivan', 'J' UNION ALL
    SELECT 6, 'inna', 'X'
) 
SELECT MIN([name]) AS name, MIN(surname) AS surname
FROM a
GROUP BY a.id


или
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
WITH a (id, [name], surname) AS 
(
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 2, 'inna', 'B' UNION ALL
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 4, 'katy', 'S' UNION ALL
    SELECT 5, 'ivan', 'J' UNION ALL
    SELECT 6, 'inna', 'X'
), 
b AS ( 
SELECT 
       [name]
     , surname
	, ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT 1)) AS rn 
FROM 
     a) 
SELECT [name], surname
FROM b
WHERE b.rn = 1;
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926338
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH a (id, [name], surname) AS 
(
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 2, 'inna', 'B' UNION ALL
    SELECT 1, 'niko', 'L' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 3, 'jane', 'A' UNION ALL
    SELECT 4, 'katy', 'S' UNION ALL
    SELECT 5, 'ivan', 'J' UNION ALL
    SELECT 6, 'inna', 'X'
) 
SELECT MIN([name]) AS name, MIN(surname) AS surname
FROM a
GROUP BY a.id



угу, name от одной записи surname от другой...
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926342
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

)))))

Tenya


Итог такой должен быть:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J
inna | X


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
name surname
---- -------
niko L
inna B
jane A
katy S
ivan J
inna X
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926351
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenya
Добрый день.

Есть таблица вида

id | name | surname
--------------------
1 | niko | L
2 | inna | B
1 | niko | L
3 | jane | A
3 | jane | A
4 | katy | S
5 | ivan | J
6 | inna | X

В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
Т.е. результат такой:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J

Возможно ли сделать это с помощью distinct?
Если нет, какие еще есть варианты?



Код: sql
1.
select distinct name, surname from table
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926355
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex, а почему не так?
Код: sql
1.
2.
select name, surname
  from (select distinct id, name, surname from table) a


П.С. думаю автор сам не знает
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926357
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin
msLex, а почему не так?
Код: sql
1.
2.
select name, surname
  from (select distinct id, name, surname from table) a



П.С. думаю автор сам не знает

Может и так. По условию, оба варианта равноправны
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926361
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin,

для Инны этот трюк не сработает.
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926362
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
nullin,

для Инны этот трюк не сработает.

а что не так с Инной (какой из двух, кстати)?
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926363
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

не заметил исправленный вариант...
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926405
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так нельзя что ли?
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY name,surname ORDER BY 1/0) FROM T)
DELETE CTE WHERE N>1;

Был бы у таблицы уникальный ключ, решений было бы больше.
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926435
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Так нельзя что ли?
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY name,surname ORDER BY 1/0) FROM T)
DELETE CTE WHERE N>1;


Был бы у таблицы уникальный ключ, решений было бы больше.

там не совсем "удалить", нужно просто в резалтсете убрать дубли.

Tenya
В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926473
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
iap
Так нельзя что ли?
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY name,surname ORDER BY 1/0) FROM T)
DELETE CTE WHERE N>1;



Был бы у таблицы уникальный ключ, решений было бы больше.

там не совсем "удалить", нужно просто в резалтсете убрать дубли.

Tenya
В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
Tenya, наверно, сумеет написать вместо DELETE - SELECT с условием WHERE N=1?
Для этого ещё добавить в CTE через запятую нужные поля (или звёздочку)

Надеюсь также, что он перестанет называть SELECT удалением!
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926486
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
msLex
пропущено...

там не совсем "удалить", нужно просто в резалтсете убрать дубли.

пропущено...
Tenya, наверно, сумеет написать вместо DELETE - SELECT с условием WHERE N=1?
Для этого ещё добавить в CTE через запятую нужные поля (или звёздочку)

Надеюсь также, что он перестанет называть SELECT удалением!

Да не нужны там оконные функции, обычного дистинкта за глаза.
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926548
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenya
Добрый день.

Есть таблица вида

id | name | surname
--------------------
1 | niko | L
2 | inna | B
1 | niko | L
3 | jane | A
3 | jane | A
4 | katy | S
5 | ivan | J
6 | inna | X

В результате необходимо вывести данные только по столбцам name и surname, при этом, удалив дубликаты по id.
Т.е. результат такой:

name | surname
--------------------
niko | L
inna | B
jane | A
katy | S
ivan | J

Возможно ли сделать это с помощью distinct?
Если нет, какие еще есть варианты?


Вы определитесь, что вам в точности надо -- удалить дубликаты или вывести список уникальных значений? Это две разные задачи.

И та и другая решается через ROW_NUMBER().
...
Рейтинг: 0 / 0
Удаление дубликатов
    #39926571
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap
Так нельзя что ли?
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY name,surname ORDER BY 1/0) FROM T)
DELETE CTE WHERE N>1;

Красивый стиль
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление дубликатов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]