Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sql Server 2008 Hàng đến cột

Có một số cách để bạn có thể chuyển đổi dữ liệu từ hàng thành cột.

Vì bạn đang sử dụng SQL Server 2008, nên bạn có thể sử dụng hàm PIVOT.

Tôi khuyên bạn nên sử dụng row_number() chức năng để hỗ trợ trong việc xoay vòng dữ liệu. Nếu bạn có một số lượng giá trị đã biết, thì bạn có thể viết mã cố định cho truy vấn:

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;

Xem SQL Fiddle with Demo .

Đối với tình huống của bạn, bạn đã nói rằng bạn sẽ có một số lượng giá trị không xác định cần phải là cột. Trong trường hợp đó, bạn sẽ muốn sử dụng SQL động để tạo chuỗi truy vấn để thực thi:

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)

Xem SQL Fiddle with Demo . Cả hai đều cho kết quả:

|  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. Bỏ qua mili giây trong một ngày

  2. SQL Server 2008:Đếm số khóa trong nhiều phạm vi ngày

  3. Sử dụng đúng các giao dịch trong SQL Server

  4. Chuyển đổi tên tháng thành số tháng trong SQL Server (T-SQL)

  5. Cách thay đổi giá trị để chỉnh sửa hàng đầu X và chọn hàng X hàng đầu trong SQL Server Management Studio (SSMS) - Hướng dẫn sử dụng SQL Server / TSQL Phần 20