কলামগুলিকে সারিগুলিতে রূপান্তর করতে আপনি UNPIVOT ফাংশনটি ব্যবহার করতে পারেন :
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
দ্রষ্টব্য, আপনি যে কলামগুলির আনপাইভোট করছেন সেগুলির ডেটাটাইপগুলি অবশ্যই একই হতে হবে তাই আপনাকে আনপিবট প্রয়োগের আগে ডেটাটাইপগুলি রূপান্তর করতে হতে পারে।
CROSS APPLY
কলামগুলি রূপান্তর করতে আপনি ইউনিয়ন সমস্তের সাথেও ব্যবহার করতে পারেন :
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);
আপনার এসকিউএল সার্ভারের সংস্করণটির উপর নির্ভর করে আপনি ভলিউস ধারাটির সাথে ক্রস প্রয়োগও করতে পারেন:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
values
('Indicator1', Indicator1),
('Indicator2', Indicator2),
('Indicator3', Indicator3),
('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
অবশেষে, যদি আনপিভট করার জন্য আপনার কাছে 150 টি কলাম থাকে এবং আপনি পুরো ক্যোয়ারিকে হার্ড-কোড করতে চান না, তবে আপনি ডায়নামিক এসকিউএল ব্যবহার করে এসকিএল স্টেটমেন্টটি তৈরি করতে পারেন:
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;