Tôi đang cố gắng tinh chỉnh truy vấn SQL để làm cho báo cáo của mình trông đẹp hơn. Truy vấn của tôi đọc dữ liệu từ một bảng, nhóm theo một vài colums và tính toán một số trường tổng hợp (số lượng và tổng).Cách tạo kết quả tổng hợp "trống" trong SQL
SELECT A, B, C, COUNT(*), SUM(D) FROM T
GROUP BY A, B, C
ORDER BY A, B, C
Bây giờ, chúng ta hãy giả định cột B và C là một số các hằng xâu được định nghĩa, ví dụ, B có thể 'B1'
hoặc 'B2'
, C có thể 'C1'
hoặc 'C2'
. Vì vậy, một ví dụ resultset là:
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A1 | B1 | C1 | 34 | 1752
A1 | B1 | C2 | 4 | 183
A1 | B2 | C1 | 199 | 8926
A1 | B2 | C2 | 56 | 2511
A2 | B1 | C2 | 6 | 89
A2 | B2 | C2 | 12 | 231
A3 | B1 | C1 | 89 | 552
...
Như bạn có thể thấy, cho 'A1'
Tôi có tất cả kết hợp Bốn thể (B, C), nhưng đó là không đúng sự thật cho 'A2'
. Câu hỏi của tôi là: làm thế nào tôi có thể tạo ra các hàng tóm tắt cho sự kết hợp (B, C) không hiện diện, trên thực tế, trong bảng đã cho? Đó là, làm thế nào tôi có thể in, ví dụ, cũng những hàng:
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A2 | B1 | C1 | 0 | 0
A2 | B2 | C1 | 0 | 0
Giải pháp duy nhất tôi có thể thấy là để tạo ra một số bảng auxiliarity với tất cả (B, C) giá trị và sau đó tạo ra một RIGHT OUTER JOIN với bảng aux đó. Nhưng tôi đang tìm kiếm một cách rõ ràng hơn ...
Cảm ơn tất cả.
Bạn đang sử dụng mssql, oracel, mysql? – Arion
Oracle. Nhưng truy vấn được viết, vào lúc này, theo một cách tiêu chuẩn (nó cũng chạy trên MySQL, chúng ta có một bản sao MySQL của DB không có lý do liên quan đến câu hỏi). –
Có thể [this] (http://www.techrepublic.com/article/group-by-grouping-sets-for-custom-rollups-in-oracle/6134424) giúp. Các bộ nhóm có sẵn trong cả SQL Server và Oracle. Không chắc về MySQL. –