Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:kolumny do wierszy

Możesz użyć funkcji UNPIVOT, aby przekonwertować kolumny na wiersze:

select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;

Zauważ, że typy danych kolumn, które chcesz unpivot, muszą być takie same, więc przed zastosowaniem unpivot może być konieczne przekonwertowanie typów danych.

Możesz także użyć CROSS APPLY z UNION ALL do konwersji kolumn:

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);

W zależności od wersji SQL Server możesz nawet użyć CROSS APPLY z klauzulą ​​VALUES:

select id, entityid,
  indicatorname,
  indicatorvalue
from yourtable
cross apply
(
  values
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);

Wreszcie, jeśli masz 150 kolumn do unpivotowania i nie chcesz na stałe kodować całego zapytania, możesz wygenerować instrukcję sql za pomocą dynamicznego 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sposoby naprawy błędu we/wy opartego na spójności logicznej w programie SQL Server

  2. operacja niedozwolona, ​​gdy obiekt jest zamknięty podczas uruchamiania bardziej zaawansowanego zapytania

  3. Zrozumienie znaczenia ustawienia pamięci w SQL Server

  4. Jak korzystać z GOTO w SQL Server

  5. Szybko wstawiaj 2 miliony wierszy do SQL Server