Quick and dirty solution which would not scale that well but works as below. You may want to investigate
CLR concatenate aggregate[/url]
declare @a table (Linenumber int, ErrorText varchar(30),FileID int)
insert into @a values
(1, 'a', 10),
(1, 'b', 10),
(2, 'a', 11),
(2, 'b', 11),
(2, 'c', 11),
(3, 'c', 12),
(3, 'd', 12)
select * from @a
declare @FileID int, @LineNumber int
declare FileIDCursor cursor for select distinct FileID, LineNumber from @a
declare @AggResult table (LineNumber int, ErrorText varchar(1000), FileID int)
open FileIDCursor
fetch next from FileIDCursor into @FileID, @LineNumber
while @@FETCH_STATUS = 0
begin
declare @Concat varchar(1000) = ''
select @Concat = @Concat + ErrorText + ','
from @a
where FileID = @FileID and linenumber = @LineNumber
insert into @AggResult
select @LineNumber, left(@Concat,len(@Concat)-1), @FileID
fetch next from FileIDCursor into @FileID, @LineNumber
end
close FileIDCursor
deallocate FileIDCursor
select * from @AggResult
Fitz