You are trying to collapse your results and include a counter in your column name. Since I assume that you do not know the potential number of columns, you need to use Dynamic SQL for this.
This should be close using ROW_NUMBER to get a counter:
declare @cols AS NVARCHAR(MAX), @colswithalias AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) set @colswithalias = STUFF((SELECT distinct ',' + QUOTENAME(col1) + ' AS Col' + CAST(ROW_NUMBER() OVER (ORDER BY col1) as varchar(10)) FROM yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) FROM yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT ' + @colswithalias + ' from ( select col1 rn, col1 from yourtable ) x pivot ( max(rn) for col1 in (' + @cols + ') ) p ' execute(@query)
source share