sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Sloupce k řádkům

K převodu sloupců na řádky můžete použít funkci UNPIVOT:

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

Všimněte si, že datové typy sloupců, které rušíte, musí být stejné, takže před použitím unpivotování možná budete muset datové typy převést.

Můžete také použít CROSS APPLY pomocí UNION ALL převedete sloupce:

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

V závislosti na vaší verzi SQL Server můžete dokonce použít CROSS APPLY s klauzulí VALUES:

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

A konečně, pokud máte 150 sloupců k rozpoutání a nechcete celý dotaz napevno kódovat, můžete vygenerovat příkaz sql pomocí dynamického 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. Jak nainstalovat SQL Server na M1 Mac (ARM64)

  2. Vkládání národních znaků do sloupce Oracle NCHAR nebo NVARCHAR nefunguje

  3. Pochopení rozdílu mezi operátory EXCEPT a NOT IN

  4. Vkládání do Oracle Nested Table v Javě