日期:2014-05-17  浏览次数:20679 次

帮忙写一个SQL
建一个视图:命名方式为:V_XXX,使使用select * from V_XXX,就可以查询出:
T_COMPANY
(员工编号,公司编号,部门编号,薪水)
下面每个公司所有部门的总薪水、平均薪水,所有公司的平均薪水、各部门平均水平和公司平均水平的差距。

------解决方案--------------------
SQL code
with T_COMPANY(emp_id, company_id, department_id, salary) as (
            select 1, '公司1', '部门1', 1000 from dual
  union all select 2, '公司1', '部门2', 1000 from dual
  union all select 3, '公司1', '部门2', 1000 from dual
  union all select 4, '公司2', '部门1', 1000 from dual
  union all select 5, '公司2', '部门1', 1000 from dual
  union all select 6, '公司2', '部门2', 1000 from dual
  union all select 7, '公司3', '部门1', 1000 from dual
)
select decode(grouping(company_id), 1, '所有公司', company_id),
       decode(grouping(department_id), 1, '所有部门', department_id),
       sum(salary), avg(salary) from t_company
group by cube(company_id,department_id);