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 dari kolom yang Anda tidakivot 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 bisa 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 tidak diproteksi dan Anda tidak ingin meng-hard-code seluruh kueri, maka Anda bisa 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;