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

SQL:Transpose Nyata

Saya tidak yakin mengapa menurut Anda Anda tidak dapat melakukannya dengan UNPIVOT dan PIVOT :

select [1], [2], [3], [4], [5]
from 
(
  select *
  from
  (
    select col1, col2, col3,
      row_number() over(order by col1) rn
    from yourtable
  ) x
  unpivot
  (
    val for col in (col1, col2, col3)
  ) u
) x1
pivot
(
  max(val)
  for rn in ([1], [2], [3], [4], [5])
) p

Lihat SQL Fiddle dengan Demo . Ini juga dapat dilakukan secara dinamis jika diperlukan.

Edit, jika urutan kolom perlu dipertahankan, maka Anda dapat menggunakan sesuatu seperti ini, yang menerapkan row_number() tanpa menggunakan order by pada salah satu kolom di tabel Anda (ini adalah artikel tentang penggunaan nomor baris non-deterministik ):

select [1], [2], [3], [4], [5]
from 
(
  select *
  from
  (
    select col1, col2, col3,
      row_number() 
        over(order by (select 1)) rn
    from yourtable
  ) x
  unpivot
  (
    val for col in (col1, col2, col3)
  ) u
) x1
pivot
(
  max(val)
  for rn in ([1], [2], [3], [4], [5])
) p;

Lihat SQL Fiddle dengan Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara menangani pemetaan ulang hanya dapat dilakukan untuk pengguna yang dipetakan ke login Windows atau SQL

  2. Cara membagi nilai yang dipisahkan koma ke kolom

  3. Klausa WHERE untuk menemukan semua catatan dalam bulan tertentu

  4. Mengekspor kolom gambar ke file pdf di server sql?

  5. Cara Mendapatkan Daftar Semua Bahasa di SQL Server (T-SQL)