[ad_1]
Cách đơn giản nhất để xoay bảng là sử dụng hàm: GIẢI MÃ(). Hàm DECODE() giống như câu lệnh if else. Nó so sánh đầu vào với từng giá trị và tạo ra đầu ra.
DECODE(đầu vào, value1, return1, value2, return2, …, mặc định)
- đầu vào/giá trị: “đầu vào” được so sánh với tất cả các “giá trị”.
- trở lại: nếu đầu vào = giá trị thì “return” là đầu ra.
- mặc định (tùy chọn): nếu đầu vào != tất cả các giá trị thì “mặc định” là đầu ra.
Khi chúng ta biết cách DECODE() hoạt động, đã đến lúc tạo bảng tổng hợp đầu tiên.
Phiên bản 1: Bảng tổng hợp không có tổng cột và hàng
Với DECODE(), chúng ta có thể vạch ra mã giả của bảng tổng hợp cho chủ cửa hàng kem. Khi “ngày trong tuần” khớp với mỗi ngày trong tuần, DECODE() trả về doanh thu của ngày đó; nếu nó không khớp, thay vào đó sẽ trả về 0.
SELECT ice cream taste,
SUM(DECODE(day of the week, 'Monday', income, 0)) AS MONDAY, SUM(DECODE(day of the week, 'Tuesday', income, 0)) AS TUESDAY,
SUM(DECODE(day of the week, 'Wednesday', income, 0)) AS WEDNESDAY,
SUM(DECODE(day of the week, 'Thursday', income, 0)) AS THURSDAY,
SUM(DECODE(day of the week, 'Friday', income, 0)) AS FRIDAY,
SUM(DECODE(day of the week, 'Saturday', income, 0)) AS SATURDAY,
SUM(DECODE(day of the week, 'Sunday', income, 0)) AS SUNDAY
FROM ice cream store dataset
WHERE date between final Monday and final Sunday;
Phiên bản thứ 2: Bảng tổng hợp có tổng cột và hàng
Bạn đã làm rất tốt! Bây giờ chủ cửa hàng kem muốn biết thêm về điều gì đã xảy ra với doanh số bán hàng tuần trước. Bạn có thể nâng cấp bảng tổng hợp của mình bằng cách thêm cột tổng và hàng tổng.
Điều này có thể được thực hiện bằng cách sử dụng BỘ NHÓM Biểu thức trong câu lệnh GROUP BY. Biểu thức GROUPING SETS xác định tiêu chí cho nhiều tập hợp GROUP BY.
BỘ NHÓM (thuộc tính1, …, ())
- thuộc tính: một phần tử đơn lẻ hoặc một danh sách các phần tử thành GROUP BY
- (): một nhóm trống, nhóm này sẽ trở thành hàng TOTAL của bảng tổng hợp
SELECT NVL(ice cream taste, 'TOTAL') "ICE CREAM FLAVOR",
SUM(DECODE(day of the week, 'Monday', income, 0)) AS MONDAY, SUM(DECODE(day of the week, 'Tuesday', income, 0)) AS TUESDAY,
SUM(DECODE(day of the week, 'Wednesday', income, 0)) AS WEDNESDAY,
SUM(DECODE(day of the week, 'Thursday', income, 0)) AS THURSDAY,
SUM(DECODE(day of the week, 'Friday', income, 0)) AS FRIDAY,
SUM(DECODE(day of the week, 'Saturday', income, 0)) AS SATURDAY,
SUM(DECODE(day of the week, 'Sunday', income, 0)) AS SUNDAY,
SUM(income) AS TOTAL
FROM ice cream store dataset
WHERE date between final Monday and final Sunday
GROUP BY GROUPING SETS (ice cream taste, ());
Lưu ý: NVL() thay thế hàng null được tạo bởi () bằng ‘TOTAL.’ Nếu bạn chưa quen với NVL()nó chỉ đơn giản là một hàm để thay thế các giá trị null.
Một cách khác để tính cột TỔNG là cộng tất cả doanh thu từ THỨ HAI đến CHỦ NHẬT:
SUM(DECODE(day of the week, 'Monday', income, 0))
+ SUM(DECODE(day of the week, 'Tuesday', income, 0))
+ SUM(DECODE(day of the week, 'Wednesday', income, 0))
+ SUM(DECODE(day of the week, 'Thursday', income, 0))
+ SUM(DECODE(day of the week, 'Friday', income, 0))
+ SUM(DECODE(day of the week, 'Saturday', income, 0))
+ SUM(DECODE(day of the week, 'Sunday', income, 0)) AS TOTAL
Phiên bản thứ 3: Bảng tổng hợp với tổng cột và hàng và các tổng khác
Giả sử chủ sở hữu kem muốn có thêm một cột trên bảng tổng hợp mà bạn đã cung cấp: tổng số lần mua từng hương vị kem. Không có gì! Bạn có thể thêm một cột “TOTAL” khác có cùng khái niệm!
SELECT NVL(ice cream taste, 'TOTAL') "ICE CREAM FLAVOR",
SUM(DECODE(day of the week, 'Monday', income, 0)) AS MONDAY, SUM(DECODE(day of the week, 'Tuesday', income, 0)) AS TUESDAY,
SUM(DECODE(day of the week, 'Wednesday', income, 0)) AS WEDNESDAY,
SUM(DECODE(day of the week, 'Thursday', income, 0)) AS THURSDAY,
SUM(DECODE(day of the week, 'Friday', income, 0)) AS FRIDAY,
SUM(DECODE(day of the week, 'Saturday', income, 0)) AS SATURDAY,
SUM(DECODE(day of the week, 'Sunday', income, 0)) AS SUNDAY,
SUM(income) AS TOTAL,
SUM(buy ID) "OTHER TOTAL"
FROM ice cream store dataset
WHERE date between final Monday and final Sunday
GROUP BY GROUPING SETS (ice cream taste, ());
[ad_2]
Source link