If the number of different links is not specified, this must be done dynamically. I think this will work as needed:
DECLARE @SQL NVARCHAR(MAX) = '' SELECT @SQL = @SQL + ',' + QUOTENAME(Rownumber) FROM ( SELECT DISTINCT ROW_NUMBER() OVER(PARTITION BY Ref, Name ORDER BY Link) [RowNumber] FROM yourTable ) d SET @SQL = 'SELECT * FROM ( SELECT Ref, name, Link, ROW_NUMBER() OVER(PARTITION BY Ref, Name ORDER BY Link) [RowNumber] FROM yourTable ) data PIVOT ( MAX(Link) FOR RowNumber IN (' + STUFF(@SQL, 1, 1, '') + ') ) pvt' EXECUTE SP_EXECUTESQL @SQL
This is a small variation of the usual PIVOT function, because usually the link will be in the column header. It basically determines the number of columns required (i.e. the maximum different values for Link per ref / Name), then summarizes the values in these columns.
GarethD
source share