部门表 职员表  薪资表
怎么实现如下视图 ?deptid deptname employeeid  employeename  money
01      业务部   01          刘备          1000
小记                                     1000
02      研发部   02          关羽          2000
02      研发部   03          张飞          3000
小记                                     5000
03      实施部   04          马超          4000
03      实施部   05          黄盖          5000
小记                                     9000
总计                                    15000

解决方案 »

  1.   

    deptid deptname employeeid employeename  money
    01     业务部    01         刘备         1000
    小记                                     1000
    02     研发部    02         关羽         2000
    02     研发部    03         张飞         3000
    小记                                     5000
    03     实施部    04         马超         4000
    03     实施部    05         黄盖         5000
    小记                                     9000
    总计                                     15000
      

  2.   

    kao 没有孙权
      

  3.   

    我这现在没有环境!
     给你个我整理的例子,希望对你有帮助!
    原始数据
    prov city cnt
    江苏 南京 1
    江苏 苏州 1
    江苏 无锡 1
    浙江 杭州 1
    浙江 温州 1我想按省分别小计一下,得到如下数据
    江苏 南京 1
    江苏 苏州 1
    江苏 无锡 1
    江苏 小计 3
    浙江 杭州 1
    浙江 温州 1
    浙江 小计 21.with tmp as(
    select '江苏' prov,'南京' city,1 cnt from dual
    union all
    select '江苏' prov,'苏州' city,1 cnt from dual
    union all
    select '江苏' prov,'无锡' city,1 cnt from dual
    union all
    select '浙江' prov,'杭州' city,1 cnt from dual
    union all
    select '浙江' prov,'温州' city,1 cnt from dual
    )
    select * from 
    (select prov,'小计' city,sum(cnt) cnt from tmp group by prov
    union
    select prov,city,cnt from tmp)
    order by prov,cnt
    ------------------
    1    江苏    南京    1
    2    江苏    苏州    1
    3    江苏    无锡    1
    4    江苏    小计    3
    5    浙江    杭州    1
    6    浙江    温州    1
    7    浙江    小计    2
      

  4.   

    SQL> with a as (select '01' deptid,'业务部 01' deptname,'01' employeeid,'刘备' employeename, 1000 money from dual
      2             union
      3             select '02' deptid,'研发部 02' deptname,'02' employeeid,'关羽' employeename, 2000 money from dual
      4             union
      5             select '02' deptid,'研发部 03' deptname,'03' employeeid,'张飞' employeename, 3000 money from dual
      6             union
      7             select '03' deptid,'实施部 04' deptname,'04' employeeid,'马超' employeename, 4000 money from dual
      8             union
      9             select '03' deptid,'实施部 05' deptname,'05' employeeid,'黄盖' employeename, 5000 money from dual
     10             )
     11  select decode(deptid1,1,'小计',3,'总计',deptid) deptid,deptname,employeeid,employeename ,money
     12  from
     13  (select deptid,deptname,employeeid,employeename,sum(money) money,grouping_id(deptid,deptname) deptid1
     14  from a
     15  group by rollup (deptid, (deptname,employeeid,employeename)) )
     16  /
     
    DEPTID DEPTNAME  EMPLOYEEID EMPLOYEENAME      MONEY
    ------ --------- ---------- ------------ ----------
    01     业务部 01 01         刘备               1000
    小计                                           1000
    02     研发部 02 02         关羽               2000
    02     研发部 03 03         张飞               3000
    小计                                           5000
    03     实施部 04 04         马超               4000
    03     实施部 05 05         黄盖               5000
    小计                                           9000
    总计                                          15000
     
    9 rows selected
     
    SQL>
      

  5.   


    SQL> edi
    已写入 file afiedt.buf  1  with emp as
      2  (select '01' deptid,'业务部' deptname,'01' employeeid,'刘备' employeename,1000 money from dual
      3  union all
      4  select '02' deptid,'研发部' deptname,'02' employeeid,'关羽' employeename,2000 money from dual
      5  union all
      6  select '02' deptid,'研发部' deptname,'03' employeeid,'张飞' employeename,3000 money from dual
      7  union all
      8  select '03' deptid,'实施部' deptname,'04' employeeid,'马超' employeename,4000 money from dual
      9  union all
     10  select '03' deptid,'实施部' deptname,'05' employeeid,'黄盖' employeename,5000 money from dual
     11  )
     12  select case when grouping(deptid)=1 then '总计' else deptid end ,case when grouping_id(deptid,d
     13  from emp
     14* group by rollup(deptid,(deptname,employeeid,employeename))
    SQL> /CASE CASEWH EM EMPL SUM(MONEY)
    ---- ------ -- ---- ----------
    01   业务部 01 刘备       1000
    01   小计                 1000
    02   研发部 02 关羽       2000
    02   研发部 03 张飞       3000
    02   小计                 5000
    03   实施部 04 马超       4000
    03   实施部 05 黄盖       5000
    03   小计                 9000
    总计                     15000已选择9行。
      

  6.   


    --美化下
    SQL> edi
    已写入 file afiedt.buf  1  with emp as
      2  (select '01' deptid,'业务部' deptname,'01' employeeid,'刘备' employeename,1000 money from dual
      3  union all
      4  select '02' deptid,'研发部' deptname,'02' employeeid,'关羽' employeename,2000 money from dual
      5  union all
      6  select '02' deptid,'研发部' deptname,'03' employeeid,'张飞' employeename,3000 money from dual
      7  union all
      8  select '03' deptid,'实施部' deptname,'04' employeeid,'马超' employeename,4000 money from dual
      9  union all
     10  select '03' deptid,'实施部' deptname,'05' employeeid,'黄盖' employeename,5000 money from dual
     11  )
     12  select case when grouping(deptid)=1 then '总计' else deptid end deptid ,case when grouping_id(d
     13  from emp
     14* group by rollup(deptid,(deptname,employeeid,employeename))
    SQL> /DEPT DEPTNA EM EMPL SUM(MONEY)
    ---- ------ -- ---- ----------
    01   业务部 01 刘备       1000
    01   小计                 1000
    02   研发部 02 关羽       2000
    02   研发部 03 张飞       3000
    02   小计                 5000
    03   实施部 04 马超       4000
    03   实施部 05 黄盖       5000
    03   小计                 9000
    总计                     15000已选择9行。
      

  7.   

    oracle rollup和cube函数可以实现你的需求 楼上的顶
      

  8.   

    SQL> edi
    已写入 file afiedt.buf  1  with emp as
      2      (select '01' deptid,'业务部' deptname,'01' employeeid,'刘备' employeename,1000 money from dual
      3     union all
      4     select '02' deptid,'研发部' deptname,'02' employeeid,'关羽' employeename,2000 money from dual
      5     union all
      6     select '02' deptid,'研发部' deptname,'03' employeeid,'张飞' employeename,3000 money from dual
      7     union all
      8     select '03' deptid,'实施部' deptname,'04' employeeid,'马超' employeename,4000 money from dual
      9     union all
     10     select '03' deptid,'实施部' deptname,'05' employeeid,'黄盖' employeename,5000 money from dual
     11  )
     12  select case when grouping(deptid)=1 then '总计' else deptid end deptid ,
     13  case when grouping_id(deptname)=1 then '小计' else deptname end deptname,
     14  employeeid,employeename,sum(money)
     15  from emp
     16* group by rollup(deptid,(deptname,employeeid,employeename))
    SQL> /DEPT DEPTNA EM EMPL SUM(MONEY)
    ---- ------ -- ---- ----------
    01   业务部 01 刘备       1000
    01   小计                 1000
    02   研发部 02 关羽       2000
    02   研发部 03 张飞       3000
    02   小计                 5000
    03   实施部 04 马超       4000
    03   实施部 05 黄盖       5000
    03   小计                 9000
    总计 小计                15000已选择9行。