Tôi đồng ý với Jamie rằng bạn có thể muốn các tổng phụ được xử lý trực quan trong một lớp khác, nhưng những gì bạn có thể muốn thử là sử dụng GROUPING()
chức năng trên cột. Hàm này trả về 1 nếu nó là một phần của GROUPING SETS
tổng phụ và 0 nếu nó là một cột thông thường. http://technet.microsoft.com/en- us / library / ms178544 (SQL.90) .aspx
Tôi đã bao gồm dữ liệu mẫu mà tôi đã thử nghiệm. Xóa WITH emp_test AS ()
đầu tiên khi bạn sử dụng câu lệnh select.
Dữ liệu thử nghiệm của tôi:
WITH emp_test AS
(
SELECT 10 AS DEPTNO, 7782 AS EMPNO, 20000 AS sal
UNION ALL SELECT 10, 7839, 10000
UNION ALL SELECT 20, 7566, 5950
UNION ALL SELECT 20, 7788, 6000
)
Trả lời để nhận Tổng phụ trên cột riêng biệt:
SELECT deptno, empno
, CASE
WHEN GROUPING(empNo) = 1 THEN null
ELSE SUM(sal)
END as sum_salary
, CASE
WHEN GROUPING(empno) = 1 THEN SUM(sal)
ELSE NULL
END AS SubTotal
FROM emp_test
GROUP BY GROUPING SETS (DeptNo, Empno), (DeptNo)