Anda dapat menggunakan fungsi UNPIVOT untuk mengubah kolom menjadi baris:
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
Catatan, tipe data kolom yang tidak Anda pivot harus sama sehingga Anda mungkin harus mengonversi tipe data sebelum menerapkan unpivot.
Anda juga dapat menggunakan CROSS APPLY
dengan UNION ALL untuk mengonversi kolom:
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);
Bergantung pada versi SQL Server Anda, Anda bahkan dapat menggunakan CROSS APPLY dengan klausa VALUES:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
values
('Indicator1', Indicator1),
('Indicator2', Indicator2),
('Indicator3', Indicator3),
('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
Terakhir, jika Anda memiliki 150 kolom untuk di-unpivot dan Anda tidak ingin membuat hard-code seluruh kueri, maka Anda dapat membuat pernyataan sql menggunakan SQL dinamis:
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;