天天看点

Transact-SQL学习笔记10——汇总数据(ROLLUP)

使用GROUP BY 子句结合聚合函数实现数据汇总

SELECT a.employee_id,a.employee_name, SUM(b.salary) AS 总工资 FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

GROUP BY a.employee_id,a.employee_name

Transact-SQL学习笔记10——汇总数据(ROLLUP)

ROLLUP

如果需要显示每个员工的各种工资类型的金额及总金额,改如何实现

1.使用UNION合并

SELECT a.employee_id,a.employee_name, b.salary_type ,b.salary FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

UNION

SELECT a.employee_id,a.employee_name, '总工资' ,sum(b.salary) FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

GROUP BY a.employee_id,a.employee_name

Transact-SQL学习笔记10——汇总数据(ROLLUP)

2.使用ROLLUP

SELECT a.employee_name, b.salary_type ,sum(b.salary) FROM employee a

INNER JOIN salary b

ON a.employee_id = b.employee_id

GROUP BY ROLLUP(a.employee_name,b.salary_type)

Transact-SQL学习笔记10——汇总数据(ROLLUP)

画红框的行就是需要的汇总行(总工资)

ROLLUP 的作用是对指定列集进行组合再汇总。ROLLUP(a,b)中,a是一个列集,b 是一个列集。在 ROLLUP 中,这两个列集的组合结果有(a,b)、(a)和0三种,ROLLUP(a,b)在返回结果上相当于 GROUP BY(ab)、GROUP BY(a)和 GROUP BY()三个分组结果集的汇总,其中GROUP BY()是对a和b的整体汇总,即表示无分组情况。

  • ROLLUP(a,b,c)组合的方法: (a,b,c)、 (a,b)、 (a)、 ()。
  • ROLLUP((a,b),c,d)组合的方法: ((a,b),c,d)、 ((a,b),c)、 (a,b)、()。
Transact-SQL学习笔记10——汇总数据(ROLLUP)

学习参考资料:《跟韩老师学 SQL Server 数据库设计与开发》

继续阅读