Поворот без использования агрегатных функций
Create Table #table(Code Varchar(15), Code_Desc Varchar(30))
Insert Into #table Values('T01', 'Desc1')
Insert Into #table Values('T02', 'Desc2')
Insert Into #table Values('T03', 'Desc3')
Insert Into #table Values('T04', 'Desc4')
SELECT DISTINCT dt.Code,T01,T02,T03,T04
FROM #table
CROSS APPLY ( VALUES ('Code_Desc','Desc1','Desc2','Desc3','Desc4' ) ) dt (Code,T01,T02,T03,T04)
Подход Dynamic Sql
DECLARE @SQL Nvarchar(max)
,@Columns nvarchar(max)
,@Columns2 nvarchar(max)
,@Columns3 nvarchar(max)
SELECT @Columns =STUFF((SELECT ', '+''''+ Code_Desc+'''' FROM #table FOR XML PATH ('')),1,1,'')
SELECT @Columns2=STUFF((SELECT ', '+ Code FROM #table FOR XML PATH ('')),1,1,'')
SELECT @Columns3=STUFF((SELECT ', '+ 'dt.'+QUOTENAME(Code) FROM #table FOR XML PATH ('')),1,1,'')
SET @SQL='SELECT DISTINCT dt.[Code],'+@Columns3+'
FROM #table
CROSS APPLY (VALUES(''Code_Desc'','+@Columns+'))'+CHAR(13)+CHAR(10)+' dt( Code,'+@Columns2+')'
PRINT @SQL
EXEC (@SQL)
Результат
Code T01 T02 T03 T04
-------------------------------------------
Code_Desc Desc1 Desc2 Desc3 Desc4