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

Chuyển đổi hàng thành cột bằng cách sử dụng 'Pivot' trong SQL Server

Nếu bạn đang sử dụng SQL Server 2005+, thì bạn có thể sử dụng PIVOT chức năng chuyển đổi dữ liệu từ hàng thành cột.

Có vẻ như bạn sẽ cần sử dụng sql động nếu không xác định được số tuần nhưng việc xem mã chính xác sẽ dễ dàng hơn khi sử dụng phiên bản được mã hóa cứng ban đầu.

Đầu tiên, đây là một số định nghĩa bảng nhanh và dữ liệu để sử dụng:

CREATE TABLE yt 
(
  [Store] int, 
  [Week] int, 
  [xCount] int
);
    
INSERT INTO yt
(
  [Store], 
  [Week], [xCount]
)
VALUES
    (102, 1, 96),
    (101, 1, 138),
    (105, 1, 37),
    (109, 1, 59),
    (101, 2, 282),
    (102, 2, 212),
    (105, 2, 78),
    (109, 2, 97),
    (105, 3, 60),
    (102, 3, 123),
    (101, 3, 220),
    (109, 3, 87);

Nếu các giá trị của bạn được biết, thì bạn sẽ viết mã cho truy vấn:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

Xem Bản trình diễn SQL

Sau đó, nếu bạn cần tạo động số tuần, mã của bạn sẽ là:

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

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);

Xem Bản trình diễn SQL.

Phiên bản động, tạo danh sách week số cần được chuyển đổi thành cột. Cả hai đều cho cùng một kết quả:

| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách các toán tử so sánh máy chủ SQL

  2. Giá trị Null có kích thước bao nhiêu trong SQL Server

  3. Các cột thưa thớt trong SQL Server:Ảnh hưởng đến thời gian và không gian

  4. Khôi phục cơ sở dữ liệu máy chủ SQL (T-SQL)

  5. Sử dụng các thủ tục được lưu trữ trên SQL Server từ Python (pyodbc)