Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить дубли в поле после группировки? / 4 сообщений из 4, страница 1 из 1
16.04.2021, 14:48
    #40063066
Digimot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубли в поле после группировки?
Допустим есть таблица
create table dbo.MainTable (col1 int, col2 int, col3 varchar(10), col4 varchar(10) )

Нужно сгруппировать записи по полям col1, col2 и для каждой группы строк вывести col3 через запятую, col4 аналогично

select coalesce(string_agg(col3,','),'None') from dbo.MainTable group by col1, col2

Если у нас в какую-то группу попали строки с разными значениями поля, то все в порядке. Но как дубли в каждом из столбцов?
Например в какой-то группе 4 строки, col3 = 'abc','All', 'All', 'abc' нужно получить 'All,abc'
...
Рейтинг: 0 / 0
16.04.2021, 15:01
    #40063076
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубли в поле после группировки?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
declare @t table (col1 int, col2 int, col3 varchar(10), col4 varchar(10));

insert into @t
values
 (1, 1, 'a', 'b'),
 (1, 1, 'a', 'b'),
 (1, 1, 'c', 'd');

with t as
(
 select
  col1, col2,
  string_agg(col3, ',') as col3__agg,
  string_agg(col4, ',') as col4__agg
 from
  @t
 group by
  col1, col2
)
select
 t.col1, t.col2, a.clo3_agg, b.clo4_agg
from
 t outer apply
 (select string_agg(x.value, ',') from (select distinct value from string_split(t.col3__agg, ',')) x) a(clo3_agg) outer apply
 (select string_agg(x.value, ',') from (select distinct value from string_split(t.col4__agg, ',')) x) b(clo4_agg);
...
Рейтинг: 0 / 0
16.04.2021, 15:13
    #40063083
Digimot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубли в поле после группировки?
invm,

Если я правильно понял, мы в начале собираем все значения, потом разбираем одно целое по запятой, удаляя дубли, после чего опять собираем. Попробую, спасибо, но нет ли более простых вариантов, на случай если на месте таблицы большой запрос, а таких полей больше десятка?
...
Рейтинг: 0 / 0
16.04.2021, 15:53
    #40063098
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубли в поле после группировки?
Digimot
но нет ли более простых вариантов
Я таких не знаю.
Digimot
если на месте таблицы большой запрос, а таких полей больше десятка?
Не вижу проблем.
Если не пугает возможная некоторая деградация производительности, можете процесс формирования списка без дублей оформить функцией и скармливать ей результат string_agg.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить дубли в поле после группировки? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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