Cách dùng lệnh PIVOT, UNION và UNION ALL khi truy vấn SQL trong Excel

Ngày tạo 05/06/2022

 -  1.689 Lượt xem

Hướng dẫn kỹ thuật gộp dữ liệu đa bảng theo chiều dọc bằng toán tử UNION / UNION ALL và xoay bảng tổng hợp chéo (Cross-tab) bằng câu lệnh TRANSFORM ... PIVOT trong SQL Excel VBA.

1.Union/Union all

Chức năng: lấy và kết nối dữ(nối) liệu từ nhiều bảng, nhiều file theo chiều dọc với cấu trúc tương tự cấu trúc bảng đầu tiên, các bảng tiếp theo sẽ được nối tiếp sau bảng đầu tiên, các trường(cột) được nối bằng cách xác định thứ tự và không quan tâm đến tên cột.

▪ UNION: không trùng lắp dữ liệu (nếu có trùng thì chỉ lấy 01 lần) – giống DISTINCT

▪ UNION ALL: kể cả trùng lắp dữ liệu (nếu trùng vẫn lấy)

Cú pháp:

+ Union:

TRUY VẤN SQLSQL Statement
SELECT col_name(s) FROM table1

UNION

TRUY VẤN SQLSQL Statement
SELECT col_name(s) FROM table2;

+ Union all:

TRUY VẤN SQLSQL Statement
SELECT col_name(s) FROM table1

UNION ALL

TRUY VẤN SQLSQL Statement
SELECT col_name(s) FROM table2;

2. Pivot

Chức năng: tính Pivot tương tự trên Excel, có điểm advance hơn là tránh bị sai sót grand total như trên Pivot của Excel.

Cú pháp:

TRANSFORM Calculated_field

TRUY VẤN SQLSQL Statement
SELECT Cols FROM Table_name

GROUP BY Cols PIVOT Col_name

TRANSFORM Hàm_tính_toán

(Tên Cột)

Kết quả hàm này sẽ hiển thị theo chiều ngang – là data chính của Pivot

SELECT tên_cột(s),

hàm_tính_toán (tên cột)

Tên cột có data cần hiển thị theo chiều dọc. Hàm tính toán có thể có hoặc          không

Nếu muốn hiện kết quả tổng thì dùng hàm tính toán(tên cột) trùng với hàm đã    dùng ở TRANSFORM

FROM [tên bảng]

 

GROUP BY tên_cột(s)

SELECT bao nhiêu cột thì phải GROUP BY bấy nhiêu cột

PIVOT tên_cột

Data của Tên cột sẽ trở thành Header hàng ngang của bản Pivot

 

 

 

Mẹo Tối ưu Truy vấn SQL trong Excel VBA & Xử lý Lỗi Thường gặp

Khi triển khai câu lệnh truy vấn SQL thông qua kết nối ADODB.Connection trên nền tảng Microsoft Excel, bạn cần lưu ý 3 quy tắc vàng sau để đảm bảo tốc độ và độ chính xác tuyệt đối:

CHUỖI KẾT NỐI & CÚ PHÁP CHUẨNMicrosoft ACE OLEDB 12.0
'' Chuỗi kết nối chuẩn hỗ trợ cả cột trộn kiểu dữ liệu Số và Văn bản (IMEX=1):
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & _
        ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"

'' Quy tắc bọc tên Sheet và tên Cột có khoảng trắng hoặc tiếng Việt:
strSQL = "SELECT [Mã Hàng], [Tên Sản Phẩm], SUM([Thành Tiền]) AS TongTien " & _
         "FROM [Data_BanHang$A1:G50000] " & _
         "WHERE [Thành Tiền] IS NOT NULL " & _
         "GROUP BY [Mã Hàng], [Tên Sản Phẩm]"
  • Luôn thêm tham số IMEX=1: Giúp trình điều khiển OLEDB không tự ý biến các mã hàng vừa có số vừa có chữ thành giá trị Null.
  • Giới hạn vùng dữ liệu khi Sheet có định dạng thừa: Thay vì gọi [Sheet1$], bạn có thể chỉ định rõ [Sheet1$A1:Z50000] để bỏ qua các dòng rác cuối bảng.
  • Đóng kết nối sau khi CopyFromRecordset: Luôn gọi rs.Close và cn.Close để giải phóng bộ nhớ RAM và tránh khóa file nguồn.
Web Admin

 
 
Gọi (028) 3514 2046