Here's one possible way you could get your results, using apply
to correlate each aggregated value back to the same table to find the filename for that value, and using string_agg
to produce a delimeted list if there are ties.
select * from (
select COL_A, Min(COL_C) MinColC,Max(COL_C) MaxColC
from T
group by COL_A
)x
outer apply (
select string_agg([filename], ', ') sMinFilename
from T
where T.COL_A=x.COL_A and T.COL_C=x.MinColC
)mn
outer apply (
select string_agg([filename], ', ') MinFilename
from T
where T.COL_A=x.COL_A and T.COL_C=x.MaxColC
)mx