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

Cách xoay dữ liệu từ một bảng với SQL server 2005

Điều này thực sự có thể được thực hiện khá dễ dàng với PIVOT hàm số. Vì câu trả lời khác không hiển thị mã được liên kết với cách thực hiện nó, đây là hai cách để PIVOT dữ liệu.

Đầu tiên là với Pivot tĩnh . Trụ tĩnh là khi bạn biết trước dữ liệu để chuyển thành cột.

select *
from 
(
    select name, id, convert(char(5), dt, 101) dt, jobid, amount
    from test
) x
pivot
(
    sum(amount)
    for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name

Xem SQL Fiddle with Demo

Cách thứ hai là sử dụng PIVOT động để xác định tại thời điểm chạy các giá trị để chuyển thành cột.

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                    from test
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, id, ' + @cols + ', jobid from 
             (
                select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                from test
            ) x
            pivot 
            (
                sum(amount)
                for dt in (' + @cols + ')
            ) p 
            order by jobid, name'

execute(@query)

Xem SQL Fiddle with Demo

Cả hai sẽ tạo ra cùng một kết quả. Dynamic hoạt động hiệu quả khi bạn không biết trước các giá trị để chuyển đổi thành cột.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nối một cột XML trở lại bản ghi mà nó bắt nguồn?

  2. Gọi thủ tục được lưu trữ từ SQL Server thủ tục được lưu trữ khác

  3. hiệu suất của công đoàn so với công đoàn tất cả

  4. SQL Server IIF so với CASE

  5. cách chuyển đổi một hàng thành Cột trong SQL Server 2005