• Quick window function based solution with xml path concatenation, should get you passed this hurdle.

    😎

    USE tempdb;

    GO

    SET NOCOUNT ON;

    IF OBJECT_ID('dbo.data_set') IS NOT NULL DROP TABLE dbo.data_set;

    create table dbo.data_set (id int primary key, col1 varchar(10));

    go

    insert into dbo.data_set values (1,'a'), (2,'b'),(3,'c'),(4,'d'),(5,'a'),(6,'b'),(7,'e'),(8,'f'),(9,'a'),(10,'a')

    ;WITH BASE_DATA AS

    (

    select

    DS.id

    ,ROW_NUMBER() OVER

    (

    PARTITION BY DS.col1

    ORDER BY DS.id ASC

    ) AS Parent_RID

    ,DS.col1 AS Col_val

    ,COUNT(DS.id) OVER

    (

    PARTITION BY DS.col1

    ) AS [count]

    from dbo.data_set DS

    )

    SELECT

    BD.id

    ,BD.Col_val

    ,STUFF( (SELECT CONCAT(CHAR(44),BS.id)

    FROM BASE_DATA BS

    WHERE BD.Col_val = BS.Col_val

    FOR XML PATH(''),TYPE).value('.[1]','VARCHAR(100)'),1,1,'') AS Child_ids

    ,BD.[count]

    FROM BASE_DATA BD

    WHERE BD.Parent_RID = 1;

    Results

    id Col_val Child_ids count

    ----------- ---------- ------------ ---------

    1 a 1,5,9,10 4

    2 b 2,6 2

    3 c 3 1

    4 d 4 1

    7 e 7 1

    8 f 8 1