Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объединение последовательных строк  [new]
Ang3L
Guest
Есть таблица состоящая из 2 колонок:
Текст | Линия

В ней хранится текст поделённый на строки и её соответствующая строка. Нужно объединить эти строки, если они смежны (сгруппировать если расстояние между строками = 1).

Пример:
Есть:
StrN
a1
b2
c3
d6
e7
f10
g11
h13
i14
j15
k16
l17

А в идеале должно получится что-то вроде (ну или что-то очень похожее из чего можно собрать таблицу ниже):
StrN
abc1
de6
fg10
hijkl13


Код в текущем виде:
SELECT table.[Text], table.[Line]
, STUFF( 
	(SELECT CHAR(13) + CAST(table.Text AS nvarchar(MAX)) + '::' + CAST(table.Line - TGroup.Line AS nvarchar(MAX))
    FROM table AS TGroup
    WHERE (table.Line - TGroup.Line) = 1
    FOR XML PATH('') ),1,1,'') AS [Group]
FROM table
ORDER BY table.[Line]

Данный код выводит только текст 2 смежных строк, а не всех кто может состоять в группе (т.е. от 2 до умерянной беск.).

Спасибо за любую помощь!
12 ноя 14, 13:30    [16834098]     Ответить | Цитировать Сообщить модератору
 Re: Объединение последовательных строк  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @t table ( str char, n int )
insert into @t
values ('a', 1)
     , ('b', 2)
     , ('c', 3)
     , ('d', 6)
     , ('e', 7)
     , ('f', 10)
     , ('g', 11)
     , ('h', 13)
     , ('i', 14)
     , ('j', 15)
     , ('k', 16)
     , ('l', 17);

with cte
as
(
select n - row_number() over ( order by n ) gr, * from @t
)

select ( select str+'' from cte where gr = t.gr for xml path('') ) as str 
    , min (n) n
from cte t
group by gr
12 ноя 14, 13:38    [16834170]     Ответить | Цитировать Сообщить модератору
 Re: Объединение последовательных строк  [new]
Ang3L
Guest
Knyazev Alexey, Спасибо большое! Уже вставил в свой код - всё работает на ура! Все кратко, четко и быстро.
Тему можно закрывать.
12 ноя 14, 14:31    [16834547]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить