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

SQL Server - PIVOT - dua kolom menjadi baris

Ada beberapa cara berbeda agar Anda bisa mendapatkan hasil yang Anda inginkan. Mirip dengan @Sheela K R jawaban Anda dapat menggunakan fungsi agregat dengan ekspresi CASE tetapi dapat ditulis dengan cara yang lebih ringkas:

select 
  max(case when rowid = 1 then first end) First1,
  max(case when rowid = 1 then last end) Last1,
  max(case when rowid = 2 then first end) First2,
  max(case when rowid = 2 then last end) Last2,
  max(case when rowid = 3 then first end) First3,
  max(case when rowid = 3 then last end) Last3,
  max(case when rowid = 4 then first end) First4,
  max(case when rowid = 4 then last end) Last4,
  max(case when rowid = 5 then first end) First5,
  max(case when rowid = 5 then last end) Last5
from yourtable;

Lihat SQL Fiddle dengan Demo .

Ini juga dapat ditulis menggunakan fungsi PIVOT, namun karena Anda ingin memutar beberapa kolom maka pertama-tama Anda ingin melihat unpivoting First Anda dan Last kolom.

Proses unpivot akan mengubah beberapa kolom Anda menjadi beberapa baris data. Anda tidak menentukan versi SQL Server yang Anda gunakan tetapi Anda dapat menggunakan SELECT dengan UNION ALL dengan CROSS APPLY atau bahkan UNPIVOT fungsi untuk melakukan konversi pertama:

select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply 
(
  select 'First', First union all
  select 'Last', Last
) c (col, value)

Lihat SQL Fiddle dengan Demo . Ini mengubah data Anda menjadi format:

|    COL |       VALUE |
|--------|-------------|
| First1 | RandomName1 |
|  Last1 | RandomLast1 |
| First2 | RandomName2 |
|  Last2 | RandomLast2 |

Setelah data berada dalam beberapa baris, Anda dapat dengan mudah menerapkan fungsi PIVOT:

select First1, Last1, 
  First2, Last2,
  First3, Last3, 
  First4, Last4, 
  First5, Last5
from
(
  select col = col + cast(rowid as varchar(10)), value
  from yourtable
  cross apply 
  (
    select 'First', First union all
    select 'Last', Last
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in (First1, Last1, First2, Last2,
              First3, Last3, First4, Last4, First5, Last5)
) piv;

Lihat SQL Fiddle dengan Demo

Keduanya memberikan hasil dari:

|      FIRST1 |       LAST1 |      FIRST2 |       LAST2 |      FIRST3 |       LAST3 |      FIRST4 |       LAST4 |      FIRST5 |       LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kelompokkan dan subtotal kolom di Reporting Services 2005

  2. 5 Manfaat Keamanan dari Solusi Pemantauan Database Berbasis Cloud

  3. Bagaimana cara menghapus atau memilih baris dari tabel yang memiliki nomor baris tertentu?

  4. Nonaktifkan Log Transaksi

  5. Sisipkan Massal File CSV yang Dikutip Sebagian di SQL Server