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

SQL Pivot - Biết cách chuyển đổi hàng thành cột

Cơ sở dữ liệu quan hệ lưu trữ một lượng lớn dữ liệu dưới dạng bảng. Các bảng này có thể có bất kỳ số hàng và cột nào. Nhưng, điều gì sẽ xảy ra nếu bạn phải thay đổi dữ liệu cấp hàng thành dữ liệu cột? Chà, trong bài viết này về SQL Pivot, tôi sẽ chỉ cho bạn cách bạn có thể chuyển đổi các hàng thành một cột trong SQL Server.

Các chủ đề sau sẽ được đề cập trong bài viết này:

  • PIVOT trong SQL là gì?
  • Cú pháp
  • Ví dụ
  • Hoạt động của Điều khoản PIVOT
  • SQL UNPIVOT

PIVOT trong SQL là gì?

PIVOT được sử dụng để xoay giá trị bảng bằng cách chuyển đổi các giá trị duy nhất của một cột thành nhiều cột. Nó được sử dụng để xoay các hàng thành giá trị cột và chạy tổng hợp khi được yêu cầu trên các giá trị cột còn lại.

Mặt khác,

UNPIVOT được sử dụng để thực hiện các thao tác ngược lại. Vì vậy, nó được sử dụng để chuyển đổi các cột của một bảng cụ thể thành các giá trị cột.

Tiếp tục trong bài viết này, chúng ta hãy hiểu cú pháp của SQL Pivot.

Cú pháp:

SELECT NonPivoted ColumnName,  
    [First Pivoted ColumnName] AS ColumnName,  
    [Second Pivoted ColumnName] AS ColumnName, 
    [Third Pivoted ColumnName] AS ColumnName,	
    ...  
    [Last Pivoted ColumnName] AS ColumnName  
FROM  
    (SELECT query which produces the data)   
    AS [alias for the initial query]  
PIVOT  
(  
    [AggregationFunction](ColumName)  
FOR   
[ColumnName of the column whose values will become column headers]   
    IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName],  [Third Pivoted ColumnName]
    ... [last pivoted column])  
) AS [alias for the Pivot Table];

Tại đây, bạn cũng có thể sử dụng mệnh đề ORDER BY để sắp xếp các giá trị theo thứ tự tăng dần hoặc giảm dần. Bây giờ bạn đã biết PIVOT trong SQL là gì và cú pháp cơ bản của nó, hãy cùng chúng tôi tiếp tục và xem cách sử dụng nó.

Ví dụ

Để bạn hiểu rõ hơn, tôi sẽ xem xét bảng sau để giải thích cho bạn tất cả các ví dụ.

Bảng nhà cung cấp:

ID nhà cung cấp DaysofManosystem Chi phí ID khách hàng PurchaseID
1 12 1230 11 P1
2 21 1543 22 P2
3 32 2345 11 P3
4 14 8765 22 P1
5 42 3452 33 P3
6 31 5431 33 P1
7 41 2342 11 P2
8 54 3654 22 P2
9 33 1234 11 P3
10 56 6832 33 P2

Hãy để chúng tôi viết một truy vấn đơn giản để lấy chi phí trung bình mà mỗi khách hàng đã bỏ ra.

SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer   
FROM Suppliers  
GROUP BY CustomerID;  

Đầu ra:

ID khách hàng AverageCostofCustomer
11 1787,75
22 4654
33 5238,33

Bây giờ, chúng ta hãy nói rằng chúng ta muốn xoay bảng trên. Tại đây, các giá trị cột CustomerID sẽ trở thành tiêu đề cột.


-- Create Pivot table with one row and three columns
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers,
[11], [22], [33]
FROM
(SELECT CustomerID, Cost
FROM Suppliers) AS SourceTable
PIVOT
(
AVG(Cost)
FOR CustomerID IN ([11], [22], [33])
) AS PivotTable;

Đầu ra:

Cost_According_To_Customers 11 22 33
AverageCostofCustomer 1787,75 4654 5238,33

Lưu ý: Khi bạn sử dụng các hàm tổng hợp với PIVOT, các giá trị null sẽ không được xem xét trong khi tính toán tổng hợp.

Chà, đó là một ví dụ cơ bản, nhưng bây giờ chúng ta hãy hiểu cách hoạt động của mệnh đề PIVOT.

Hoạt động của điều khoản PIVOT

Như bạn có thể tham khảo ở trên, để tạo BẢNG PIVOT, bạn cần thực hiện theo các bước sau:

  • Chọn các cột để xoay vòng
  • Sau đó, chọn một bảng nguồn.
  • Áp dụng toán tử PIVOT, sau đó sử dụng các hàm tổng hợp.
  • Đề cập đến các giá trị tổng hợp.

Chọn cột để xoay vòng

Ban đầu, chúng ta phải chỉ định các trường được đưa vào kết quả của chúng ta. Trong ví dụ của chúng tôi, tôi đã xem xét cột AverageCostofCustomer trong bảng Pivot. Sau đó, chúng tôi tạo ba cột khác với các tiêu đề cột 11, 22 và 33. Ví dụ-

SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]

Chọn bảng nguồn

Tiếp theo, bạn phải chỉ định câu lệnh SELECT sẽ trả về dữ liệu nguồn cho bảng tổng hợp. Trong ví dụ của chúng tôi, chúng tôi đang trả lại CustomerID và Chi phí từ bảng Nhà cung cấp.

(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable

Áp dụng toán tử PIVOT, sau đó sử dụng các hàm tổng hợp

Tiếp theo, bạn phải chỉ định hàm tổng hợp sẽ được sử dụng trong khi tạo bảng tổng hợp. Trong ví dụ của chúng tôi, tôi đã sử dụng hàm AVG để tính chi phí trung bình.

PIVOT ( AVG(Cost)

Đề cập đến giá trị tổng hợp

Cuối cùng, bạn phải đề cập đến các giá trị phải được đưa vào bảng tổng hợp kết quả. Các giá trị này sẽ được sử dụng làm tiêu đề cột trong bảng tổng hợp.

FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;

Đó là cách hoạt động của toán tử PIVOT. Tiếp tục trong bài viết này về SQL PIVOT, chúng ta hãy hiểu nó khác với SQL UNPIVOT như thế nào.

SQL UNPIVOT

Toán tử SQL UNPIVOT được sử dụng để thực hiện thao tác ngược lại với PIVOT. Nó được sử dụng để xoay dữ liệu cột thành dữ liệu cấp hàng. Cú pháp của UNPIVOT tương tự như cú pháp của PIVOT. Sự khác biệt duy nhất là bạn phải sử dụng Từ khóa SQL “ UNPIVOT” .

Ví dụ:

Hãy để chúng tôi tạo một bảng với các cột SupplierID, AAA, BBB và CCC. Ngoài ra, hãy chèn một vài giá trị.

CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int);  
GO  
INSERT INTO sampletable VALUES (1,3,5,6);  
INSERT INTO sampletable VALUES (2,9,2,8);  
INSERT INTO sampletable VALUES (3,8,1,7);  
GO  

Đầu ra:

ID nhà cung cấp AAA BBB CCC
1 3 5 6
2 9 2 8
3 8 1 7

Bây giờ, giả sử chúng tôi muốn bỏ chia bảng. Để làm điều đó, bạn có thể tham khảo đoạn mã sau:

SELECT SupplierID, Customers, Products
FROM
(SELECT SupplierD, AAA, BBB, CCC
FROM sampletable) p
UNPIVOT
(Products FOR Customers IN
(AAA, BBB, CCC)
)AS example;
GO
ID nhà cung cấp Khách hàng Sản phẩm

1

AAA

3

1

BBB

5

1

CCC

6

2

AAA

9

2

BBB

2

2

CCC

8

3

AAA

8

3

BBB

1

3

CCC

7

Đó là cách bạn có thể sử dụng SQL PIVOT và UNPIVOT. Với điều này, chúng ta kết thúc bài viết này. Tôi hy vọng bạn đã hiểu, làm thế nào để sử dụng SQL. Nếu bạn muốn tìm hiểu thêm về MySQL và làm quen với cơ sở dữ liệu quan hệ nguồn mở này, hãy xem Đào tạo chứng chỉ MySQL DBA của chúng tôi đi kèm với đào tạo trực tiếp do người hướng dẫn hướng dẫn và trải nghiệm dự án thực tế. Khóa đào tạo này sẽ giúp bạn hiểu sâu về MySQL và giúp bạn đạt được thành thạo về chủ đề này.

Bạn có câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của bài viết này trên SQL Pivot và tôi sẽ liên hệ lại với bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận tất cả các kết hợp có thể có của các hàng từ hai bảng trong SQL

  2. Cách di chuyển cơ sở dữ liệu vào máy chủ người bán lại của bạn

  3. Lợi ích và Bảo mật trong Dịch vụ Cơ sở dữ liệu Quan hệ của Amazon

  4. Thủ tục lưu trữ để lấy thông tin lưu trữ máy chủ trong máy chủ

  5. Beverly Hills 90210 và ZIP + 4:Xử lý địa chỉ trong mô hình dữ liệu