What I have done is, first concatenated the letter column group by number column. Then given a row number partition by concatenated letters and order by number. Then again concatenated the number column group by the concatenated
Query
;with cte as(
    select *
    from (
        select [number], stuff((
                select ', ' + [letter] 
                from [your_table_name]
                where ([number] = t.[number]) 
                for xml path('')
            )
           , 1, 2, ''
        ) as letters
        from [your_table_name] t
        group by [number]
    )t2
)
select [letters], stuff((
        select ', ' + cast(number as varchar(100)) 
        from cte
        where ([letters] = t.[letters]) 
        for xml path('')
    )
    , 1, 2, ''
) as [numbers]
from cte t
group by [letters]; 
Find a demo here