Mit der UNPIVOT- Funktion können Sie die Spalten in Zeilen konvertieren:
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
Beachten Sie, dass die Datentypen der Spalten, die Sie entfernen, identisch sein müssen, sodass Sie möglicherweise die Datentypen konvertieren müssen, bevor Sie das Unpivot anwenden.
Sie können auch CROSS APPLY
mit UNION ALL die Spalten konvertieren:
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);
Abhängig von Ihrer Version von SQL Server können Sie CROSS APPLY sogar mit der VALUES-Klausel verwenden:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
values
('Indicator1', Indicator1),
('Indicator2', Indicator2),
('Indicator3', Indicator3),
('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
Wenn Sie 150 Spalten zum Aufheben des Pivots haben und nicht die gesamte Abfrage fest codieren möchten, können Sie die SQL-Anweisung mithilfe von dynamischem SQL generieren:
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;