Thứ Ba, 8 tháng 11, 2022

TRANSACT-SQL: VÍ DỤ MINH HỌA VỀ PIVOT VÀ UNPIVOT

PIVOT, trong các hệ quản trị cơ sở dữ liệu, là lệnh tổng hợp dữ liệu cho phép chuyển dữ liệu trong một cột của một Table thành các trường dữ liệu của một Table khác. Lệnh này cho phép người dùng có thể chọn một trường dữ liệu làm tiêu chí, từ đó “chiếu” các dữ liệu khác lên trường dữ liệu này để quan sát.

PIVOT

Để minh hoạ cho lệnh PIVOT, ta tạo một bảng dữ liệu về đơn đặt hàng của một cửa hàng bán đồ điện tử (Laptop, điện thoại di động, .v.v.).

Đầu tiên, chuyển vào làm việc trong CSDL tempdb, sau đó tạo bảng Sales_Order và chèn dữ liệu minh họa vào bảng:

use tempdb;

if exists (select * from sysobjects where name='Sales_Order' and type='U')
drop table Sales_Order;

CREATE TABLE Sales_Order
(
	Customer varchar(20), 
	Product varchar(10), 
	Quantity int
);

insert into Sales_Order values ('Minh Thu',  	 'Laptop',  	3);
insert into Sales_Order values ('Minh Thu',  	 'iPhone',  	2);
insert into Sales_Order values ('Minh Thu',  	 'Laptop',  	5);
insert into Sales_Order values ('Tuan Anh',  	 'Laptop',  	3);
insert into Sales_Order values ('Tuan Anh',  	 'iPhone',  	3);
insert into Sales_Order values ('Tuan Anh',  	 'iPhone',  	4);

Thực hiện lệnh Select để xem dữ liệu đã chèn đúng chưa?

SELECT * FROM Sales_Order;

Kết quả lệnh Select có dạng như sau:

Bảng dữ liệu minh họa

Sau khi đã có đầy đủ dữ liệu rồi, ta thực hiện việc thống kê thông tin về tổng số hàng mà mỗi khách hàng đặt mua cho mỗi loại hàng. Sử dụng lệnh PIVOT áp dụng cho cột Product và tính tổng cột Quantity, ta được:

SELECT * FROM Sales_Order
PIVOT (SUM(Quantity) FOR Product IN ([Laptop],[iPhone])) AS PivotedOrder;

Thực thi câu lệnh SQL này, ta được:

Kết quả thực thi Select với Pivot

Lưu ý, ta có thể Select tiếp từ kết quả của PIVOT trên như sau:

SELECT Customer, [Laptop] FROM 
(SELECT * FROM Sales_Order) AS OriginalOrder
PIVOT (SUM(Quantity) FOR Product IN ([Laptop],[iPhone])) AS PivotedOrder;

Khi đó, kết quả sẽ co hẹp lại:

Kết quả sẽ co hẹp lại

UNPIVOT

Lệnh UNPIVOT có chức năng ngược lại với chức năng của lệnh PIVOT. Xét ví dụ sau:

if exists (select * from sysobjects 
		where name='Sales_PivotedOrder' and type='U')
drop table Sales_PivotedOrder;

CREATE TABLE Sales_PivotedOrder
(
	Customer varchar(20), 
	Laptop int, 
	iPhone int
);

insert into Sales_PivotedOrder values ('Minh Thu',  	 8,  	2);
insert into Sales_PivotedOrder values ('Tuan Anh',  	 3,  	7);

select * from Sales_PivotedOrder;

Thực thi các lệnh trên, ta được bảng có dạng sau:

Bảng dữ liệu minh họa ví dụ Select - Unpivot

Thực thi lệnh UNPIVOT trên bảng Sales_PivotedOrder trên:

SELECT Customer, Product, Quantity FROM Sales_PivotedOrder
UNPIVOT (Quantity FOR Product IN ([Laptop],[iPhone])) AS UnPVT;

Ta thu được kết quả:

Kết quả thực thi lệnh Select - Unpivot

Các bạn có thể tải mã nguồn của ví dụ minh họa trên để thử nghiệm.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master