Вам нужно будет использовать CTE , чтобы сгладить это.
Это должно подключиться непосредственно к SQL и работать с данными, приведенными в качестве примера.Очевидно, вам нужно обновить запросы для ваших реальных данных, поскольку это, вероятно, не ваша реальная схема
create table #tableA (ID int, [rank] int, name varchar(max))
insert into #tableA values(1,100,'Name1')
insert into #tableA values(1,45,'Name2')
insert into #tableA values(2,60,'Name3')
insert into #tableA values(2,42,'Name4')
insert into #tableA values(2,88,'Name5')
insert into #tableA values(3,50,'Name6')
insert into #tableA values(3,50,'Name7')
create table #tableB (ID int, [FileName] varchar(max))
insert into #tableB values(1,'fn1')
insert into #tableB values(2,'fn2')
insert into #tableB values(3,'fn3')
SELECT B.*,A.Name, ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.[rank]) AS RowNum
INTO #RankedTable
FROM #tableB as B
LEFT JOIN (
SELECT A.Id, MAX(A.Rank)as Rank
FROM #tableA AS A
GROUP BY A.Id
) AS NewA
JOIN #tableA AS A
on A.Rank = NewA.Rank
AND A.ID = NewA.Id
on NewA.ID = B.ID
;WITH ConcatenationCTE (ID, [FileName], Name, RowNum)
AS
(
SELECT ID, [FileName], Name, RowNum
FROM #RankedTable
WHERE RowNum = 1
UNION ALL
SELECT #RankedTable.ID, #RankedTable.[FileName],
ConcatenationCTE.Name + ',' + #RankedTable.Name AS Name,
#RankedTable.RowNum
FROM #RankedTable
JOIN ConcatenationCTE
ON ConcatenationCTE.ID = #RankedTable.ID
AND ConcatenationCTE.RowNum +1 = #RankedTable.RowNum
)
SELECT ConcatenationCTE.ID, [FileName], Name
FROM ConcatenationCTE
JOIN
(SELECT ID, MAX(RowNum) AS RowNum
FROM ConcatenationCTE GROUP BY ID) AS FinalValues
ON FinalValues.ID = ConcatenationCTE.ID
AND FinalValues.RowNum = ConcatenationCTE.RowNum