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.