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

Sql Server 2008 Baris ke Kolom

Ada beberapa cara untuk mengubah data dari baris menjadi kolom.

Karena Anda menggunakan SQL Server 2008, maka Anda dapat menggunakan fungsi PIVOT.

Saya akan menyarankan menggunakan row_number() berfungsi untuk membantu dalam memutar data. Jika Anda memiliki jumlah nilai yang diketahui, Anda dapat membuat hard-code kueri:

select user, category1, category2, category3, category4
from
(
  select [user], category,
    'Category'+cast(row_number() over(partition by [user] 
                                      order by [user]) as varchar(3)) rn
  from yt
) d
pivot
(
  max(category)
  for rn in (category1, category2, category3, category4)
) piv;

Lihat SQL Fiddle dengan Demo .

Untuk situasi Anda, Anda menyatakan bahwa Anda akan memiliki jumlah nilai yang tidak diketahui yang perlu menjadi kolom. Dalam hal ini, Anda akan ingin menggunakan SQL dinamis untuk menghasilkan string kueri untuk dieksekusi:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Category'+cast(row_number() over(partition by [user] 
                                                                      order by [user]) as varchar(3))) 
                    from yt
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT [user],' + @cols + ' 
              from
              (
                select [user], category,
                  ''Category''+cast(row_number() over(partition by [user] 
                                                    order by [user]) as varchar(3)) rn
                from yt
              ) d
              pivot 
              (
                  max(category)
                  for rn in (' + @cols + ')
              ) p '

execute(@query)

Lihat SQL Fiddle dengan Demo . Keduanya memberikan hasil:

|  USER |  CATEGORY1 | CATEGORY2 | CATEGORY3 | CATEGORY4 |
----------------------------------------------------------
| Bruce |     Laptop |      Beer |    (null) |    (null) |
| Chuck | Cell Phone |    (null) |    (null) |    (null) |
|  Jack |      Shoes |       Tie |     Glass |    (null) |
| Peggy |       Shoe |     Skirt |       Bat |       Cat |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan hasil SQL dinamis menjadi variabel untuk sql-server

  2. Menghubungkan ke instance bernama SQL Server 2008 dari ASP klasik

  3. Apakah lebih baik menjalankan banyak perintah sql dengan satu koneksi, atau menyambung kembali setiap saat?

  4. Pernyataan insert exec tidak dapat disarangkan

  5. Salinan kaskade baris dalam sql