3. CÁC LOẠI TRUY VẤN KHÁC
3.3 Truy vấn Crosstab
a) Công dụng:
- Truy vấn Crosstab được dùng để tóm lược dữ liệu và trình bày kết quả theo dạng cô
đọng như một bảng tính, với một hình thức rất dễđọc. Vì vậy nó thường được dùng để
tạo nên số liệu để so sánh và tiên đoán hướng phát triển của dữ liệu. - Có 2 phần việc chính trong truy vấn Crosstab là :
+ Thực hiện phân nhóm và tính toán (như truy vấn tính tổng)
+ Sau đó trong mỗi nhóm ta lại chia thành các nhóm con, thực hiện phép toán trên mỗi nhóm con và trình bày kết quả theo từng cột (mỗi nhóm con ứng với một cột)
Ví dụ : Giả sử trong bảng Hang, bảng ChitietHD của CSDL Quanlyhanghoa gồm các trường MaH, TenH, Loai, SoHD, MaH, SLban ta có thể dùng truy vấn Crosstab để đưa ra bảng thống kê xem trong mỗi hoá đơn có bao nhiêu loại hàng và mỗi loại hàng
đó có số lượng như thế nào?: SoHD Tổng SL hàng bán A B C HD1 15 3 7 2 HD2 17 10 5 HD3 16 1 15 HD4 20 10 4
b) Cấu trúc của truy vấn:
A. Gồm các trường như truy vấn Total:
1. Các trường phân nhóm (Total: Group By) 2. Các trường tính toán (Total: Sum hoặc Avg ….) 3. Các trường điều kiện (Total: Where)
B. Thêm hai trường
1. Trường phân nhóm con theo cột: Ô Total: Group by
2. Trường tính toán trên các nhóm con Ô Total: Hàm (Sum, Count, Avg….) Ô Crosstab: Value
Chú ý : Nội dung của ô Crosstab đối với các trường của nhóm A như sau: 1. Trường điều kiện: Để trống
2. Các trường phân nhóm và tính toán, nếu:
Để trống: không hiển thị
Row heading: Hiển thị các giá trị theo hàng
c) Cách xây dựng truy vấn:
Bước 1: Chọn các bảng/ truy vấn nguồn để xây dựng truy vấn mới.
Bước 2: Chọn mục Crosstab Query trong menu Query
Kết quả: Trong QBE xuất hiện thêm hai hàng là: Total và Crosstab.
Bước 3: Chọn các trường
1. Dùng làm tiêu chuẩn lựa chọn các bản ghi:
Total: Where Crosstab: để trống Criteria: điều kiện chọn
2. Phân nhóm và hiển thị theo hàng
Total: Group by
Crosstab: Row heading
Dòng Sort, Criteria, Or có thể dùng
3. Tính theo nhóm và hiển thị theo hàng
Total: Group by
Crosstab: Row heading
Dòng Sort, Criteria, Or có thể dùng
4. Một trường dùng để phân nhóm con và hiển thị theo cột
Total: Group by
Crosstab: Column Heading
5. Một trường dùng để tính toán trên các nhóm con và hiển thị kết quả theo bảng
Total: Hàm (Sum, Count, Avg, …) Crosstab :Value
Bước 4: Ghi và đặt tên cho truy vấn.
Ví dụ 1: Giả sử có bảng Hang, ChitietHD của CSDL Quanlyhanghoa gồm các trường MaH, TenH, Loai, SoHD, MaH, SLban. Hãy đưa ra bảng thống kê trên.
Các bước thực hiện:
1. Chọn bảng Hang, ChitietHD làm dữ liệu nguồn 2. Chọn kiểu truy vấn Crosstab
3. Đưa vào truy vấn các trường sau: - Trường phân nhóm là: SoDH
- Trường tính toán trên nhóm là SLban (để tinh tổng số lượng hàng bán của mỗi hoá đơn).
- Trường phân nhóm con là trường Loai (mỗi loại thống kê xem có số
lượng bán như thế nào?)
- Trường tính toán trên nhóm con là trường SLban(để tính tổng số lượng hàng bán của mỗi loại)
Màn hình thiết kế như hình 3.12
Hình 3.12
Bước 4: Ghi lại thiết kế truy vấn và chạy khi đó ta được kết quả như hình 2.13
Hình 3.13
Ví dụ 2: giả sử có bảng HOCSINH (KHOI, LOP, TO, LOAI, HOTEN)
Yêu cầu đặt ra là xây dựng bảng tổng hợp theo mẫu như sau, chỉ thổng kê với khối 9. Lớp Tổ Sĩ số Kém Đạt Khá Giỏi
9A 1 10 1 4 2 3
9A 2 12 5 5 2
9A 1 9 2 7
9B 2 14 5 4 1
Trong ví dụ này chúng ta có các trường phân nhóm, đó là LOP, TO và trường LOAI sẽ
là phân nhóm nhỏđể hiển thị theo cột.
Các bước làm như sau:
1. Chọn bảng HOCSINH làm nguồn cho truy vấn 2. Chọn kiểu truy vấn Crosstab
3. Đưa vào truy vấn các trường sau: - Trường điều kiện là trường KHOI - Các trường phân nhóm là: LOP và TO
- Trường phân nhóm con là trường LOAI (mỗi tổ thống kê xem có bao nhiêu học sinh giỏi, khá, trung bình…).
- Trường tính toán trên nhóm con là trường HOTEN (đếm số học sinh từng loại).
Cửa sổ thiết kế truy vấn có dạng hình 3.14:
Hình 3.14
d) Thứ tự hiển thị các cột
Qua bảng kết quả của ví dụ 1 ta thấy, các cột “A”, “B”, “C”, được sắp xếp theo thứ tự
ABC của tiêu đề cột. Nếu không có mặt hàng nào loại “D” thì không có cột “D” trong bảng kết quả.
Ta có thể sắp xếp các cột kết quả theo ý muốn và thêm các cột rỗng, ta cần dùng thuộc tính Column Heading của truy vấn. Thực hiện như sau:
+ Mở truy vấn trong chếđộ Design + Mở bảng thuộc tính của truy vấn
+ Trong dòng thuộc tính Column Heading ta đặt tiêu đề các cột cần hiển thị
theo thứ tự từ trái sang phải.
Trong ví dụ trên ta có bảng thuộc tính như hình 3.15:
Hình 3.15
Thực hiện truy vấn ta thu được kết quả như hình 3.16: Ta thấy ởđây cột “D” không có dữ liệu nhưng vẫn được hiển thị.
Hình 3.16