公司资料表:company
company_Type    Type_Name  company_ID   company_Name 
1 国外公司   0001          外国公司A
1                 国外公司   0002          外国公司B
2 国内公司   0003          国内公司A
2 国内公司   0004          国内公司B
3 其他公司   0005        其他公司A
3 其他公司   0006        其他公司B收费表:charge
company_ID  company_Name  charge1 charge2 charge3
0001 外国公司A  1000.00 500.00 600.00
0002 外国公司B          2000.00 400.00 400.00
0003 国内公司A          500.00 300.00 300.00
0004 国内公司B          500.00 700.00 400.00
0005 其他公司A          200.00 200.00 200.00
0006 其他公司B          200.00 200.00 200.00我现在想得到这样的结果:
company_ID  company_Name  charge1 charge2 charge3
0001 外国公司A          1000.00 500.00 600.00
0002 外国公司B          2000.00 400.00 400.00
国外公司 小计 3000.00 900.00 1000.00
0003 国内公司A          500.00 300.00 300.00
0004 国内公司B          500.00 700.00 400.00
国内公司 小计          1000.00  1000.00 700.00
0005 其他公司A          200.00 200.00 200.00
0006 其他公司B          200.00 200.00 200.00
其他公司 小计              400.00 400.00 400.00
全部公司 合计        4400.00    2300.00 2100.00用一条语句搞定
应该是用 grouping  加 group by  with rollup
来写,高手来帮帮忙
谢谢,先

解决方案 »

  1.   

    select company_ID,company_Name,charge1,charge2,charge3
    from (
           select '全部公司' as company_ID,'合计' as company_Name, sum(charge1) as charge1,
                 sum(charge2) as charge2,sum(charge3) as charge3, 
                 max(company_ID) || 'Z' as company_ID_sort
           from charge
      union
           select a.Type_Name as company_ID, '小计' as company_Name, sum(charge1) as charge1,
                  sum(charge2) as charge2,sum(charge3) as charge3, 
                  max(a.company_ID) || '1' as company_ID_sort
           from company a inner join charge b on a.company_ID=b.company_ID
           group by a.Type_Name
      union
           select a.company_ID,a.company_Name,charge1,charge2,charge3, a.company_ID as company_ID_sort
           from company a inner join charge b on a.company_ID=b.company_ID
    )
    order by company_ID_sort
      

  2.   

    SELECT DECODE(GROUPING(department_name), 1, 'All Departments',
          department_name) AS department_name,
       DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job_id,
       COUNT(*) "Total Empl", AVG(salary) * 12 "Average Sal"
       FROM employees e, departments d
       WHERE d.department_id = e.department_id
       GROUP BY CUBE (department_name, job_id);DEPARTMENT_NAME                JOB_ID     Total Empl Average Sal
    ------------------------------ ---------- ---------- -----------
    Accounting                     AC_ACCOUNT          1       99600
    Accounting                     AC_MGR              1      144000
    Accounting                     All Jobs            2      121800
    Administration                 AD_ASST             1       52800
    .
    .
    .
    All Departments                ST_MAN              5       87360
    All Departments                All Jobs          107  77798.1308