23/11/2024 | 03:10

Mệnh đề PIVOT trong SQL Server

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.

Trong SQL Server (Transact-SQL) thanh toán , 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 sử dụng , 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

Cú pháp mệnh đề PIVOT

SELECT cot_dautien AS <bidanh_cot_dautien>,
[giatri_chuyen1] tổng hợp , [giatri_chuyen2] kinh nghiệm , … [giatri_chuyen_n]
FROM
(<bang_nguon>) AS <bidanh_bang_nguon>
PIVOT
(
ham_tong (<cot_tong>)
FOR <cot_chuyen>
IN ([giatri_chuyen1] ứng dụng , [giatri_chuyen2] như thế nào , … [giatri_chuyen_n])
) AS <bidanh_bang_chuyen>;

Tên biến dịch vụ hoặc giá trị biến

cot_dautien

Cột vô hiệu hóa hoặc biểu thức quản lý sẽ thành cột đầu tiên trong bảng mới sau khi chuyển.

bidanh_cot_dautien

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

giatri_chuyen1 ứng dụng , giatri_chuyen2 đăng ký vay , … giatri_chuyen_n

Danh sách giảm giá 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 quản lý của bang_nguon

ham_tong

Hàm tính tổng như SUM địa chỉ , COUNT chi tiết , MIN tính năng , MAX hay AVG.

cot_tong

Cột quảng cáo hoặc biểu thức ở đâu uy tín được dùng ứng dụng với ham_tong.

cot_chuyen

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

bidanh_bang_chuyen

Bí danh kỹ thuật của bảng sau khi chuyển.

Mệnh đề PIVOT lấy liền có thể dùng trong tăng tốc các phiên bản sau ở đâu tốt của SQL Server: SQL Server 2014 kiểm tra , SQL Server 2012 kỹ thuật , SQL Server 2008 R2 tốt nhất , SQL Server 2008 tải về , SQL Server 2005.

Để thực hiện theo hay nhất các bước trong hướng dẫn như thế nào , hãy xem phần DDL cập nhật để tạo bảng mật khẩu và DML vô hiệu hóa để 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 an toàn của bạn.

Ví dụ chi tiết với mệnh đề PIVOT

Ta có bảng nhanvien ứng dụng với dữ liệu các dữ liệu như như thế nào dưới đây.

so_nhanvienhotenluongid_phong
12009NguyenHuong5400045
34974PhamHoa8000045
34987PhanLan4200045
45001TranHua5750030
75623VuHong6500030

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

SELECT ‘TongLuong’ AS TongLuongTheoPhong an toàn , 
[30] tải về , [45]
FROM
(SELECT id_phong trực tuyến , luong
FROM nhanvien) AS BangNguon
PIVOT
(
SUM(luong)
FOR id_phong IN ([30] xóa tài khoản , [45])
) AS BangChuyen;

Kết quả trả về địa chỉ sẽ như quản lý dưới đây.

TongLuongTheoPhong3045
TongLuong122500176000

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

Xác định cụ thể cột trong bảng mới mới nhất 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 cài đặt . Ở ví dụ này là TongLuong làm cột đầu tiên trực tuyến , chia sẻ sau đó là 2 cột id_phong 30 trực tuyến và id_phong 45.

SELECT “TongLuong’ AS TongLuongTheoPhong ở đâu tốt , 
[30] tải về , [45]

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

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

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

(SELECT id_phong link down , luong
FROM nhanvien) AS BangNguon

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

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

Hàm mẹo vặt có thể dùng trong truy vấn chéo gồm SUM xóa tài khoản , COUNT nguyên nhân , MIN trên điện thoại , MAX tính năng và AVG trên điện thoại . Ở 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 ở đâu uy tín để đưa vào kết quả quản lý . Đây ở đâu nhanh sẽ là tiêu đề cột trong truy vấn chéo.

Ở ví dụ này qua mạng , chúng ta chỉ cần trả về id_phòng 30 kinh nghiệm và 45 an toàn . Các giá trị này lấy liền sẽ là tên cột trong bảng mới mật khẩu . Cần nhớ là sửa lỗi những giá trị này là danh sách có giới hạn giảm giá của tải về các giá trị id_phong ở đâu tốt và không nhất thiết phải chứa hỗ trợ tất cả an toàn các giá trị.

FOR id_phong IN ([30] giảm giá , [45])

DDL/DML cho miễn phí các ví dụ

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

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

CREATE TABLE phong
( id_phong INT NOT NULL hỗ trợ ,
ten_phong VARCHAR(50) NOT NULL tốc độ ,
CONSTRAINT pk_phong PRIMARY KEY (id_phong)
) ;
CREATE TABLE nhanvien
( so_nhanvien INT NOT NULL sử dụng ,
ho VARCHAR(50) NOT NULL ở đâu nhanh ,
ten VARCHAR(50) NOT NULL miễn phí ,
luong INT tự động ,
id_phong INT,
CONSTRAINT pk_nhanvien PRIMARY KEY (so_nhanvien)
) ;

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

INSERT INTO phong
(id_phong mật khẩu , ten_phong)
VALUES
(30 lấy liền , ‘Ketoan’);
INSERT INTO phong
(id_phong tất toán , ten_phong)
VALUES
(45 tính năng , ‘Banhang’);
INSERT INTO nhanvien
(so_nhanvien cập nhật , ho đăng ký vay , ten giảm giá , luong dữ liệu , id_phong)
VALUES
(12009 xóa tài khoản , ‘Nguyen’ trên điện thoại , ‘Huong’ qua app , 54000 xóa tài khoản , 45);
INSERT INTO nhanvien
(so_nhanvien dữ liệu , ho lấy liền , ten ứng dụng , luong đăng ký vay , id_phong)
VALUES
(34974 kiểm tra , ‘Pham’, ‘Hoa’ nơi nào , 80000 lừa đảo , 45);
INSERT INTO nhanvien
(so_nhanvien tính năng , ho giảm giá , ten tăng tốc , luong ở đâu uy tín , id_phong)
VALUES
(34987 tự động , ‘Phan’ vô hiệu hóa , ‘Lan’ bản quyền , 42000 vô hiệu hóa , 45);
INSERT INTO nhanvien
(so_nhanvien nạp tiền , ho tổng hợp , ten trực tuyến , luong tăng tốc , id_phong)
VALUES
45001 nhanh nhất , ‘Tran’ giảm giá , ‘Hue’ qua mạng , 57500 kích hoạt , 30);
INSERT INTO nhanvien
(so_nhanvien khóa chặn , ho mới nhất , ten như thế nào , luong full crack , id_phong)
VALUES
(75623 sửa lỗi , ‘Vu’ danh sách , ‘Hong’ chia sẻ , 65000 trực tuyến , 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

4.9/5 (107 votes)