Как разделить строку на группы по 5?

Рейтинг: 1Ответов: 1Опубликовано: 11.03.2023

Всем привет! В MSSQL Server 2022 есть таблица вида

house   flats
1 6
1 9
1 20
1 25
1 27
1 31
1 54
1 72
2 3
2 6
2 8
2 17

Нужно написать запрос , который вернёт данные в виде дом + 5 квартир

house   flats
1   25,6,6,20,72
1   54,27,31,9
2   8,17,3,6,8

Пока у меня получилось только агреггировать данные в 1 строку

house   flats
1   25,6,6,20,72,54,27,31,9
2   8,17,3,6,8

Буду рад помощи. Спасибо.

Ответы

▲ 0

Пожалуйста, попробуйте следующее решение.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (house INT, flats INT)
INSERT @tbl (house, flats) VALUES
(1, 6 ),
(1, 9 ),
(1, 20),
(1, 25),
(1, 27),
(1, 31),
(1, 54),
(1, 72),
(2, 3 ),
(2, 6 ),
(2, 8 ),
(2, 17);
-- DDL and sample data population, end

DECLARE @bucketSize INT = 5;  

;WITH rs AS
(
    SELECT *
       , ROW_NUMBER() OVER (PARTITION BY house ORDER BY @@SPID) AS seq
    FROM @tbl
), rs2 AS
(
    SELECT *
            , _flat = TRY_CAST(flats AS VARCHAR(5))
           , FLOOR((seq - 1)/@bucketSize) + 1 as grpNum
    FROM rs
)
SELECT house, flats = STRING_AGG(_flat, ',')
FROM rs2
GROUP BY grpNum, house
ORDER BY house;

Результат

house flats
1 6,9,20,25,27
1 31,54,72
2 3,6,8,17