Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server :Колони към редове

Можете да използвате функцията UNPIVOT, за да преобразувате колоните в редове:

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

Имайте предвид, че типовете данни на колоните, които отменяте, трябва да са еднакви, така че може да се наложи да конвертирате типовете данни, преди да приложите отмяната.

Можете също да използвате CROSS APPLY с UNION ALL, за да конвертирате колоните:

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

В зависимост от вашата версия на SQL Server можете дори да използвате CROSS APPLY с клаузата VALUES:

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

И накрая, ако имате 150 колони за развъртане и не искате да кодирате твърдо цялата заявка, тогава можете да генерирате оператора sql с помощта на динамичен 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. Как мога да променя моята база данни по подразбиране в SQL Server, без да използвам MS SQL Server Management Studio?

  2. Как мога да разбера кога попълването на пълен текстов индекс на SQL приключи?

  3. Как да коригирате „Отказът на ALTER TABLE SWITCH е неуспешен“ Msg 4982 (SQL Server)

  4. Как да свържете много редове със същия идентификатор в sql?

  5. Внедряване на пейджинг с помощта на OFFSET FETCH NEXT в SQL Server