похоже, что нет идентификатора, который бы сгруппировал четыре строки (не видно полной метки времени в вашем образце). Вот пример с группирующим столбцом, который вычисляется на основе мода 4 и рекурсивного cte
DECLARE @tab TABLE (id int identity(1,1), msg varchar(100))
INSERT INTO @tab
VALUES
('selected: a')
,('selected: b')
,('selected: c')
,('selected: d')
,('selected: e')
,('selected: f')
,('selected: g')
,('selected: h')
,('selected: i')
,('selected: j')
,('selected: k')
,('selected: l')
;with src --add grouping column
as
(
SELECT
id
,msg = left(msg, charindex(':', msg, 1)-1)
,val = LTRIM(SUBSTRING(msg, CHARINDEX(':', msg, 1)+1, len(msg) ))
,nid = ROW_NUMBER() over (partition by id % 4 order by id)
FROM @tab
)
,source --add column for recursion
as
(
SELECT
*,
rn = ROW_NUMBER() OVER (PARTITION BY nid ORDER BY id)
FROM src
)
,rcdef -- define recursive cte
AS (
SELECT
nid
,msg
,val = convert(varchar(max), val)
,rn = 1
FROM source
WHERE rn = 1
UNION ALL
SELECT
rcdef.nid
, rcdef.msg
,val = convert(varchar(max), rcdef.val +',' + source.val) --concatenate vals
,rn = rcdef.rn + 1
FROM rcdef
INNER JOIN source on source.nid = rcdef.nid and source.rn = rcdef.rn + 1
)
SELECT
nid,
val = msg + ': ' + max(val)
FROM rcdef
GROUP BY nid, msg