powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как удалить дубли в поле после группировки?
4 сообщений из 4, страница 1 из 1
Как удалить дубли в поле после группировки?
    #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
Как удалить дубли в поле после группировки?
    #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
Как удалить дубли в поле после группировки?
    #40063083
Digimot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

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


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