आप स्तंभों को पंक्तियों में बदलने के लिए UNPIVOT फ़ंक्शन का उपयोग कर सकते हैं :
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
ध्यान दें, आपके द्वारा अप्रकाशित किए जा रहे स्तंभों का डेटाटाइप समान होना चाहिए, ताकि आपको अप्रत्यक्ष आवेदन करने से पहले डेटाटिप्स को बदलना पड़े।
आप CROSS APPLY
कॉलम बदलने के लिए UNION ALL के साथ भी उपयोग कर सकते हैं:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
select 'Indicator1', Indicator1 union all
select 'Indicator2', Indicator2 union all
select 'Indicator3', Indicator3 union all
select 'Indicator4', Indicator4
) c (indicatorname, indicatorvalue);
SQL सर्वर के आपके संस्करण के आधार पर आप VALPSES खंड के साथ CROSS APPLY का भी उपयोग कर सकते हैं:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
values
('Indicator1', Indicator1),
('Indicator2', Indicator2),
('Indicator3', Indicator3),
('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
अंत में, यदि आपके पास 150 स्तंभ हैं, तो आप बिना किसी क्वेरी के हार्ड-कोड करना चाहते हैं, तो आप डायनेमिक SQL का उपयोग करके sql स्टेटमेंट जेनरेट कर सकते हैं:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name = 'yourtable' and
C.column_name like 'Indicator%'
for xml path('')), 1, 1, '')
set @query
= 'select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in ('+ @colsunpivot +')
) u'
exec sp_executesql @query;