Mệnh đề PIVOT trong SQL Server

Cùng xem Mệnh đề PIVOT trong SQL Server trên youtube.

Trong SQL Server (Transact-SQL), mệnh đề PIVOT cho phép phân tích bảng chéo (cross tabulation) chuyển dữ liệu từ bảng này sang bảng khác, tức là lấy kết quả tổng hợp rồi chuyển từ dòng thành cột.

Ví dụ tính tổng rồi chuyền hàng thành cột trong bảng dữ liệu
Ví dụ tính tổng rồi chuyền hàng thành cột trong bảng dữ liệu

Cú pháp mệnh đề PIVOT

SELECT cot_dautien AS <bidanh_cot_dautien>, [giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n] FROM (<bang_nguon>) AS <bidanh_bang_nguon> PIVOT ( ham_tong (<cot_tong>) FOR <cot_chuyen> IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]) ) AS <bidanh_bang_chuyen>;

Bạn đang xem: pivot trong sql

Tên biến hoặc giá trị biến

cot_dautien: Cột hoặc biểu thức sẽ thành cột đầu tiên trong bảng mới sau khi chuyển.

bidanh_cot_dautien: Tên của cột đầu tiên trong bảng mới sau khi chuyển.

giatri_chuyen1, giatri_chuyen2, … giatri_chuyen_n: Danh sách các giá trị cần chuyển.

bang_nguon: Lệnh SELECT đưa dữ liệu nguồn (dữ liệu ban đầu) vào bảng mới.

bidanh_bang_nguon: Bí danh của bang_nguon

ham_tong: Hàm tính tổng như SUM trong SQL Server, COUNT, MIN, MAX hay AVG.

cot_tong: Cột hoặc biểu thức được dùng với ham_tong.

cot_chuyen: Cột chứa giá trị cần chuyển.

bidanh_bang_chuyen: Bí danh của bảng sau khi chuyển.

Mệnh đề PIVOT có thể dùng trong các phiên bản sau của SQL Server: SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005.

Để thực hiện theo các bước trong hướng dẫn, hãy xem phần DDL để tạo bảng và DML để tạo dữ liệu ở cuối bài viết này rồi thử chạy trên chính cơ sở dữ liệu của bạn.

Ví dụ với mệnh đề PIVOT

Ta có bảng nhanvien với các dữ liệu như dưới đây.

Có thể bạn quan tâm: Chứng chỉ tiếng Anh B2 châu Âu là gì? Thi B2 châu Âu ở đâu?

Xem Thêm : chứng chỉ sư phạm trong tiếng anh là gì

so_nhanvienhotenluongid_phong12009NguyenHuong540004534974PhamHoa800004534987PhanLan420004545001TranHua575003075623VuHong6500030

Chạy lệnh SQL dưới đây để tạo truy vấn chéo bằng mệnh đề PIVOT.

SELECT ‘TongLuong’ AS TongLuongTheoPhong, [30], [45] FROM (SELECT id_phong, luong FROM nhanvien) AS BangNguon PIVOT ( SUM(luong) FOR id_phong IN ([30], [45]) ) AS BangChuyen;

Kết quả trả về sẽ như dưới đây.

TongLuongTheoPhong3045TongLuong122500176000

Ví dụ trên tạo một bảng sau khi đã chuyển dữ liệu, cho biết tổng lương của phòng có ID là 30 và phòng có ID là 45. Kết quả nằm trên 1 hàng với 2 cột, mỗi cột là 1 phòng.

Xác định cụ thể cột trong bảng mới của truy vấn chéo

Trước tiên cần xác định trường thông tin nào muốn đưa vào bảng chuyển. Ở ví dụ này là TongLuong làm cột đầu tiên, sau đó là 2 cột id_phong 30 và id_phong 45.

SELECT “TongLuong’ AS TongLuongTheoPhong, [30], [45]

Xác định dữ liệu trong bảng nguồn

Tiếp theo là xác định lệnh SELECT sẽ trả về dữ liệu nguồn cho bảng mới.

Ở ví dụ này là id_phong và luong từ bảng nhanvien.

(SELECT id_phong, luong FROM nhanvien) AS BangNguon

Cần chỉ ra bí danh cho truy vấn nguồn, trong ví dụ này là BangNguon.

Có thể bạn quan tâm: mẫu chứng chỉ giám sát xây dựng

Xem Thêm : Tổng Hợp Tranh Vẽ Đề Tài Lễ Hội Chọi Trâu, Múa Lân, Ngày Tết – Tốp 10 Dẫn Đầu Bảng Xếp Hạng Tổng Hợp Leading10

Xác định hàm tính tổng

Hàm có thể dùng trong truy vấn chéo gồm SUM, COUNT, MIN, MAX và AVG. Ở ví dụ này là hàm tính tổng SUM.

PIVOT (SUM(luong)

Xác định giá trị cần chuyển

Cuối cùng là giá trị cần chuyển để đưa vào kết quả. Đây sẽ là tiêu đề cột trong truy vấn chéo.

Ở ví dụ này, chúng ta chỉ cần trả về id_phòng 30 và 45. Các giá trị này sẽ là tên cột trong bảng mới. Cần nhớ là những giá trị này là danh sách có giới hạn của các giá trị id_phong và không nhất thiết phải chứa tất cả các giá trị.

FOR id_phong IN ([30], [45])

DDL/DML cho các ví dụ

Nếu có CSDL và muốn làm thử những ví dụ trong hướng dẫn dùng lệnh PIVOT trên, bạn sẽ cần có DDL/DML.

DDL – Data Definition Language là các lệnh tạo bảng (CREATE TABLE) để dùng trong ví dụ về mệnh đề PIVOT.

CREATE TABLE phong ( id_phong INT NOT NULL, ten_phong VARCHAR(50) NOT NULL, CONSTRAINT pk_phong PRIMARY KEY (id_phong) ) ; CREATE TABLE nhanvien ( so_nhanvien INT NOT NULL, ho VARCHAR(50) NOT NULL, ten VARCHAR(50) NOT NULL, luong INT, id_phong INT, CONSTRAINT pk_nhanvien PRIMARY KEY (so_nhanvien) ) ;

DML – Data Manipulation Language là các lệnh INSERT để tạo dữ liệu cần thiết cho bảng.

INSERT INTO phong (id_phong, ten_phong) VALUES (30, ‘Ketoan’); INSERT INTO phong (id_phong, ten_phong) VALUES (45, ‘Banhang’); INSERT INTO nhanvien (so_nhanvien, ho, ten, luong, id_phong) VALUES (12009, ‘Nguyen’, ‘Huong’, 54000, 45); INSERT INTO nhanvien (so_nhanvien, ho, ten, luong, id_phong) VALUES (34974, ‘Pham’, ‘Hoa’, 80000, 45); INSERT INTO nhanvien (so_nhanvien, ho, ten, luong, id_phong) VALUES (34987, ‘Phan’, ‘Lan’, 42000, 45); INSERT INTO nhanvien (so_nhanvien, ho, ten, luong, id_phong) VALUES 45001, ‘Tran’, ‘Hue’, 57500, 30); INSERT INTO nhanvien (so_nhanvien, ho, ten, luong, id_phong) VALUES (75623, ‘Vu’, ‘Hong’, 65000, 30);

Bài trước: Truy vấn con SUBQUERY trong SQL Server

Bài sau: Các kiểu dữ liệu trong SQL Server

Tham khảo: Kênh bán hàng là gì và ý nghĩa của nó

Nguồn: https://dongnaiart.edu.vn
Danh mục: Tổng hợp

Lời kết: Trên đây là bài viết Mệnh đề PIVOT trong SQL Server. Hy vọng với bài viết này bạn có thể giúp ích cho bạn trong cuộc sống, hãy cùng đọc và theo dõi những bài viết hay của chúng tôi hàng ngày trên website: Dongnaiart.edu.vn

Related Posts

Trang bóng đá trực tiếp xoilac TV – Nơi trải nghiệm bóng đá full HD

Trang bóng đá trực tiếp xoilac TV – Nơi trải nghiệm bóng đá full HD

Với anh em mê bóng đá chắc chắn không thể không biết tới xoilac TV. Đây là một trong những trang web phát bóng đá trực tiếp…

Luongsontv – Kênh cung cấp các trận bóng đá đa dạng nhất hiện nay

Luongsontv – Kênh cung cấp các trận bóng đá đa dạng nhất hiện nay

Nếu anh em là những fan hâm mộ bóng đá và anh em đang tìm kiếm địa chỉ xem bóng đá trực tiếp uy tín. Vậy anh…

Top ghi bàn bóng đá Ngoại hạng Anh: Ai sẽ là vua phá lưới Ngoại hạng Anh mùa giải năm nay?

Top ghi bàn bóng đá Ngoại hạng Anh: Ai sẽ là vua phá lưới Ngoại hạng Anh mùa giải năm nay?

Trong cuộc đua nảy lên đỉnh cao của sân cỏ Anh, cuộc chiến vị trí Top ghi bàn bóng đá Ngoại hạng Anh trở nên căng thẳng…

Nhận định bóng đá Lille vs Metz 23h05 ngày 3/12 (Ligue 1 2023/24)

Nhận định bóng đá Lille vs Metz 23h05 ngày 3/12 (Ligue 1 2023/24)

Đừng bỏ lỡ cơ hội thưởng thức bóng đá hấp dẫn nhất nhanh truy cập vào cakhia tv trực tiếp trực tiếp bóng đá để nhận định…

Hé lộ những điều ít ai biết về trang web bóng đá xoilac

Hé lộ những điều ít ai biết về trang web bóng đá xoilac

Là trang web có thời gian hoạt động khá dài, xoilac đã dần có vị trí quan trọng trên thị trường bóng đá trực tiếp. Càng ngày…

Bayern thăng hoa, Leverkusen thật sự đáng gờm

Bayern thăng hoa, Leverkusen thật sự đáng gờm

Hãy nhanh tay truy cập xoilac để theo dõi và không bỏ lỡ bất kỳ các thông tin tin tức, sự kiện thể thao và trực tiếp…