Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server:Kolom ke Baris

Anda dapat menggunakan fungsi UNPIVOT untuk mengubah kolom menjadi baris:

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

Catatan, tipe data kolom yang tidak Anda pivot harus sama sehingga Anda mungkin harus mengonversi tipe data sebelum menerapkan unpivot.

Anda juga dapat menggunakan CROSS APPLY dengan UNION ALL untuk mengonversi kolom:

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

Bergantung pada versi SQL Server Anda, Anda bahkan dapat menggunakan CROSS APPLY dengan klausa VALUES:

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

Terakhir, jika Anda memiliki 150 kolom untuk di-unpivot dan Anda tidak ingin membuat hard-code seluruh kueri, maka Anda dapat membuat pernyataan sql menggunakan SQL dinamis:

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. Agregasi String Selama Bertahun-tahun di SQL Server

  2. datetime2 vs datetimeoffset di SQL Server:Apa Perbedaannya?

  3. Cara Mendokumentasikan Database SQL Server Anda

  4. Izin EXECUTE ditolak pada objek 'xxxxxxx', basis data 'zzzzzzz', skema 'dbo'

  5. ADO.NET memanggil Prosedur Tersimpan T-SQL menyebabkan SqlTimeoutException