Then you need dynamic SQL. To create a list of columns, consider something like this:
DECLARE @collist nvarchar(max); SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, '');
Now you can use @collist to help build the query you want, which is then triggered using sp_executesql
Like this:
DECLARE @collist nvarchar(max); SELECT @collist = STUFF((SELECT ', ' + quotename(Type) FROM YourTable GROUP BY Type FOR XML PATH('')), 1, 2, ''); DECLARE @qry nvarchar(max); SET @qry = N' SELECT Title, ' + @collist + ' FROM ( SELECT t.Title, t.Type, (SELECT STUFF((SELECT '', '' + t2.Name FROM YourTable t2 WHERE t2.Title = t.Title AND t2.Type = t.Type ORDER BY t2.Name FOR XML PATH('''')),1,2,'''')) AS Names FROM YourTable t GROUP BY t.Type, t.Title ) tg pivot (max(Names) for tg.Type in (' + @collist + ')) p '; exec sp_executesql @qry;
source share