Это может быть выполнено с использованием динамического SQL как с UNPIVOT
, так и с PIVOT
.
DECLARE @colsUnPivot AS NVARCHAR(MAX),
@colsPivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @colsUnPivot = stuff((select ','+quotename(C.name)
from sys.columns as C
where C.object_id = object_id('t') and
C.name like 'lit%'
for xml path('')), 1, 1, '')
SET @colsPivot = STUFF((SELECT distinct ',' + QUOTENAME(c.Language)
FROM t c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query =
'SELECT * from
(
select Language l1, type language, value
from t
unpivot
(
value
for type in (' + @colsUnPivot + ')
) upvt
) x
pivot
(
min(value)
for l1 in (' + @colsPivot + ')
) p '
execute(@query)
См. SQL Fiddle с демоверсией