• 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