आपका वांछित आउटपुट बिल्कुल स्पष्ट नहीं है, लेकिन आप दोनों का उपयोग कर सकते हैं 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 with Demo
फिर यदि आपके पास अज्ञात संख्या में मान हैं, तो आप गतिशील 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 with Demo
यदि परिणाम सही नहीं है, तो कृपया अपना ओपी संपादित करें और अपने द्वारा प्रदान की गई दोनों आईडी से अपेक्षित परिणाम पोस्ट करें।