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

SQL transpose tabel lengkap

Untuk mentranspos data ke hasil yang Anda inginkan, Anda harus menggunakan UNPIVOT dan PIVOT fungsi.

UNPIVOT fungsi mengambil A dan B kolom dan mengubah hasilnya menjadi baris. Kemudian Anda akan menggunakan PIVOT berfungsi untuk mengubah day nilai ke dalam kolom:

select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv

Lihat SQL Fiddle dengan Demo.

Jika Anda menggunakan SQL Server 2008+, maka Anda dapat menggunakan CROSS APPLY dengan VALUES untuk membatalkan data. Kode Anda akan diubah menjadi berikut:

select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', A),('B', B)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv

Lihat SQL Fiddle dengan Demo.

Edit #1, menerapkan kueri Anda saat ini ke dalam solusi di atas, Anda akan menggunakan sesuatu yang mirip dengan ini:

select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv



  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 - gabungkan baris ke dalam daftar yang dipisahkan koma

  2. Masukkan semua nilai tabel ke tabel lain di SQL

  3. Apa itu LEN() di SQL Server?

  4. Bagaimana cara mendapatkan id yang terakhir dimasukkan?

  5. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY di SQL Server:Apa Perbedaannya?