nathanjd51 Ответов: 1

Слияние данных в две строки в SQL server


Здравствуйте, у меня есть эти данные:

id    column1
1     Cars
1     Phones
1     Phones : Apple
2     Trucks
2     Phones : Android
3     Trucks
3     Phones

Мне нужно взять эти данные и вернуть вот это:

id    column1
1     Cars
1     Phones : Apple
2     Trucks
2     Phones : Android
3     Trucks
3     Phones

Как вы можете видеть, для телефонов ID 1 и телефонов : Apple объединяются вместе.

Что я уже пробовал:

Я много гуглил это и нигде не видел ничего подобного. Решение должно работать с тысячами строк и сотнями вариантов column1, но разделителем всегда будет двоеточие. Пожалуйста, помогите!

1 Ответов

Рейтинг:
4

Maciej Los

Я бы посоветовал использовать LEAD или LAG функции, подобные этой:

DECLARE @tmp TABLE(id int, column1 varchar(50))
INSERT INTO @tmp(id, column1)
VALUES(1, 'Cars'),
(1, 'Phones'),
(1, 'Phones : Apple'),
(2, 'Trucks'),
(2, 'Phones : Android'),
(3, 'Trucks'),
(3, 'Phones')

SELECT id, column1 --, column2
FROM
(
	SELECT * , LEFT(LEAD(column1) OVER(ORDER BY id), LEN(column1)) AS column2
	FROM @tmp
) T
WHERE column1<>column2 


Результат:
id	column1
1	Cars
1	Phones : Apple
2	Trucks
2	Phones : Android
3	Trucks


Для получения более подробной информации, пожалуйста, смотрите:
Оконные функции SQL Server лидируют и отстают[^]
Функция SQL Server LAG() на практических примерах[^]
LEAD (Transact-SQL) - SQL Server | Microsoft Docs[^]
LAG (Transact-SQL) - SQL Server | Microsoft Docs[^]


CPallini

5.

Maciej Los

Спасибо, Карло.

MadMyche

+5

Maciej Los

Спасибо.

nathanjd51

Спасибо! Я добавил раздел по идентификатору в оператор OVER, чтобы каждый идентификатор был отдельным, и он отлично работает.

Maciej Los

Отлично, и мы вам очень рады.