sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Kolonner til rækker

Du kan bruge UNPIVOT-funktionen til at konvertere kolonnerne til rækker:

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

Bemærk, datatyperne for de kolonner, du deaktiverer, skal være de samme, så du skal muligvis konvertere datatyperne, før du anvender unpivoten.

Du kan også bruge CROSS APPLY med UNION ALL for at konvertere kolonnerne:

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

Afhængigt af din version af SQL Server kan du endda bruge CROSS APPLY med VALUES-sætningen:

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

Til sidst, hvis du har 150 kolonner, der skal deaktiveres, og du ikke ønsker at hardkode hele forespørgslen, kan du generere sql-sætningen ved hjælp af dynamisk 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. ORA-16205 Opgradering til 11.2.0.3

  2. EXP() Funktion i Oracle

  3. Brug af docker-compose til at oprette tabeller i postgresql-databasen

  4. Hvordan SUBDATE() virker i MariaDB