如何在Oracle做到小計與總計的功能呢???答案就是Rollup !!!
Rollup的翻譯:捲起 奇摩字典
在SQL的世界中,就是可以針對Group By的欄位做小計的功能。
員工資料中有 員工名稱、工號、部門、職務代號、薪水,
如果我們想要得到兩個結果:
1.每個部門不同職務的員工薪水的加總
2.每個部門的員工薪水的加總
其實第二個結果就是第一個結果的小計。
我們可以分兩種查詢方式, 一是下兩次SQL得到兩個結果集,當然使用Rollup就可以一次得到我們要的結果集了。
先介紹會用到的兩張Table:employees , departments
employees
departments
解法一:
1.每個部門不同職務的員工薪水的加總
select d.department_name, e.job_id, sum(e.salary) group_salary from employees e, departments d where e.department_id = d.department_id group by d.department_name, e.job_id ;
2.每個部門的員工薪水的加總
select d.department_name, sum(e.salary) group_salary from employees e, departments d where e.department_id = d.department_id group by d.department_name ;
解法二:
針對職務名稱(Job_ID)做小計,就是在group by 中加入rollup(job_id)
其中另外加入grouping,grouping(job_id)的結果為1,即為小計的結果。
select d.department_name, e.job_id, grouping(e.job_id) job_flag, sum(e.salary) group_salary from employees e, departments d where e.department_id = d.department_id group by d.department_name, rollup(e.job_id) ;
建議解法一的第一個結果能夠order by Department Name一下,這樣比較好跟解法二做比較喔 ^^
回覆刪除寫了一篇使用報表工具跟你這篇呼應的文章喔
回覆刪除http://pinnynet.blogspot.com/2009/11/cliend-side-report-rdlc-group.html