Как разделить строку на группы по 5?
Всем привет! В 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
Буду рад помощи. Спасибо.
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующее решение.
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 |