परिणाम प्राप्त करने के लिए आप PIVOT फ़ंक्शन का उपयोग कर सकते हैं, आपको बस row_number()
का उपयोग करना होगा की मदद।
इसके लिए मूल प्रश्न होगा:
select skill_id, skill, parameter,
row_number() over(partition by skill, skill_id order by skill_id) rn
from yt;
देखें SQL Fiddle with Demo
. मैं row_number()
. का उपयोग करता हूं skill
. के भीतर प्रत्येक पंक्ति में एक अलग मान लागू करने के लिए और skill_id
, तो आप इस पंक्ति संख्या मान को स्तंभ के रूप में PIVOT के रूप में उपयोग करेंगे।
PIVOT लागू होने वाला पूरा कोड होगा:
select skill_id, skill,[Parameter_1], [Parameter_2], [Parameter_3]
from
(
select skill_id, skill, parameter,
'Parameter_'+cast(row_number() over(partition by skill, skill_id
order by skill_id) as varchar(10)) rn
from yt
) d
pivot
(
max(parameter)
for rn in ([Parameter_1], [Parameter_2], [Parameter_3])
) piv;
देखें SQL Fiddle with Demo .
आपके मामले में, ऐसा लगता है कि आपके पास प्रत्येक कौशल के लिए अज्ञात संख्या में पैरामीटर होंगे। यदि यह सत्य है, तो आप परिणाम प्राप्त करने के लिए गतिशील SQL का उपयोग करना चाहेंगे:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Parameter_'
+cast(row_number() over(partition by skill, skill_id
order by skill_id) as varchar(10)))
from yt
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT skill_id, skill,' + @cols + ' from
(
select skill_id, skill, parameter,
''Parameter_''+cast(row_number() over(partition by skill, skill_id
order by skill_id) as varchar(10)) rn
from yt
) x
pivot
(
max(parameter)
for rn in (' + @cols + ')
) p '
execute(@query);
देखें SQL Fiddle with Demo