Желаемый результат не совсем ясен, но вы можете использовать функции UNPIVOT
и PIVOT
, чтобы получить результат.
Если вы знаете количество столбцов, вы можете жестко закодировать значения:
select *
from
(
select id,
'Instance'+cast(instance as varchar(10))+'_'+col col,
value
from
(
select id,
Instance,
Name,
cast(Size as varchar(50)) Size,
Tech
from yourtable
) x
unpivot
(
value
for col in (Name, Size, Tech)
) u
) x1
pivot
(
max(value)
for col in
([Instance0_Name], [Instance0_Size], [Instance0_Tech],
[Instance1_Name], [Instance1_Size], [Instance1_Tech],
[Instance2_Name], [Instance2_Size], [Instance2_Tech],
[Instance3_Name], [Instance3_Size], [Instance3_Tech])
) p
См. SQL Fiddle с демонстрацией.
Затем, если у вас есть неизвестное количество значений, вы можете использовать динамический sql:
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT ','
+ quotename('Instance'+ cast(instance as varchar(10))+'_'+c.name)
from yourtable t
cross apply sys.columns as C
where C.object_id = object_id('yourtable') and
C.name not in ('id', 'instance')
group by t.instance, c.name
order by t.instance
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select *
from
(
select id,
''Instance''+cast(instance as varchar(10))+''_''+col col,
value
from
(
select id,
Instance,
Name,
cast(Size as varchar(50)) Size,
Tech
from yourtable
) x
unpivot
(
value
for col in (Name, Size, Tech)
) u
) x1
pivot
(
max(value)
for col in ('+ @colspivot +')
) p'
exec(@query)
См. SQL Fiddle с демонстрацией.
Если результат неверен, отредактируйте свой OP и опубликуйте результат, который вы ожидаете от обоих предоставленных вами идентификаторов.
person
Taryn
schedule
08.01.2013
ID
отображалось в конечном результате? У вас есть разныеIDs
, так какой из них вы хотите? - person Taryn   schedule 09.01.2013