有三个表 aa,bb,cc,
表aa
id    单位类型dwtype       单位系统dwxt
1      机关                       教育、
2      事业                     党委
3      事业                      党委机关bb
id      编制数bzs
1        2事业cc
id      编制数bzs
2          3
3          5其中 表 aa 是主表,其bb、cc是从表我现在想要统计成以下方式单位系统       (合计,机关数,事业数)             编制数(合计,机关编制数,事业编制数)
教育             1,1,0                                              2,2,0
党委             2,0,2                                              8,0,8谢谢

解决方案 »

  1.   

    SQL> select dwxt,sum(jg)+sum(sy) || ',' || sum(jg) || ',' || sum(sy) hj1,
      2  sum(jgbzs)+sum(sybzs) || ',' || sum(jgbzs) || ',' || sum(sybzs) hj2 from
      3  (select aa.id,1 jg,0 sy,bzs jgbzs, 0 sybzs,dwxt from aa,bb where aa.id=bb.i
    d
      4  union
      5  select aa.id,0 jg,1 sy,0 jgbzs,bzs sybzs,dwxt from aa,cc where aa.id=cc.id)  6  group by dwxt;
      

  2.   

    我想的方法比较笨:
    做一个视图:dd
    id    单位类型dwtype       单位系统dwxt  编制数bzs
    1      机关                      教育       2
    2      事业                      党委       3
    3      事业                      党委       5
    select 单位系统,aaa(单位系统),bbb(单位系统) from dd group by 单位系统两个函数aaa,bbb分别用于计算 (合计,机关数,事业数)  和  编制数(合计,机关编制数,事业编制数)
    但是完全用一条语句,我不知道如何解决。
      

  3.   

    select aa.dwxt,
           count(dwxt) "合计",
           count(bb.id) "机关数",
           count(cc.id) "事业数",
           nvl(sum(bb.bzs),0) + nvl(sum(cc.bzs),0)"编制数合计",
           nvl(sum(bb.bzs),0) "机关编制数",
           nvl(sum(cc.bzs),0) "事业编制数"
    from aa,bb,cc
    where aa.id = bb.id(+) and aa.id = cc.id(+)
    group by aa.dwxt
      

  4.   

    其实应该是 如下显示:
    单位系统       (合计 机关数 事业数)             编制数(合计 机关 编制数 事业编制数)
    教育             1 1 0                                             2 2 0
    党委             2 0 2                                              8 0 8问题已经解决 
    我本来也是用union的方法 但是老是提示“ select的块结果集不匹配”
    我看了下二楼的 好像必须对应字段我的写法如下:
    select decode(grouping(UnitSys2_dictname),1,'合计',UnitSys2_dictname),sum(decode(UnitType,'21',1,0)) sjgs,sum(decode(UnitType,'22',1,0)) sjgs2,
    sum(decode(UnitType,'12',1,0)) xjgs2,sum(aaf) aaf,
    sum(aat) aat,sum(aal) aal,sum(ama) ama,sum(ast) ast,sum(ase) ase,sum(aco) aco    
    from 
    (
    select 0 aaf,0 aat,a.AppAll aal,a.AppMargin ama,a.AppStaffer ast,a.AppSelf ase,a.AppCorp aco,
    b.UnitSys2_dictname,b.UnitType
    from dwcareer a ,dwinfo b
    where b.UnitType='22' or b.UnitType='21' and a.dwguid = b.dwguid
    union 
    select c.AppAffair aaf,c.AppAttach aat,0 aal,0 ama,0 ast,0 ase,0 aco,b.UnitSys2_dictname,b.UnitType
    from dworgan c ,dwinfo b
    where b.UnitType='12' and c.dwguid = b.dwguid

    group by cube(UnitSys2_dictname);显示效果如下:
                 SJGS  SJGS2   XJGS2     AAF    AAT   AAL    AMA    AST    ASE    ACO
    ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    合计          2     0     1          0      0     35    35      0     326        5
    教育系统      1    0      1          0      0     32    32      0      323       2
    卫生系统      1    0      0          0      0     3     3               3        3已选择3行
    谢谢各位
      

  5.   

    我测试了下 
    duanzilin(寻)的很好,
    比我的更简洁
      

  6.   

    请问:duanzilin(寻)按照你的写法如下:
    select decode(grouping(a.UnitSys2_dictname),1,'合计',a.UnitSys2_dictname),
           nvl(sum(decode(UnitType,'12',1,0)),0)+nvl(count(c.dwguid),0) jgs,
           sum(decode(UnitType,'12',1,0)) xjgs,
           count(c.dwguid) sjgs,
           nvl(sum(b.AppAffair),0) + nvl(sum(b.AppAttach),0) + nvl(sum(c.AppAll),0) + 
           nvl(sum(c.AppMargin),0)+nvl(sum(c.AppStaffer),0)+nvl(sum(c.AppSelf),0)+
           nvl(sum(c.AppCorp),0) total,
           nvl(sum(b.AppAffair),0) aaf,
           nvl(sum(b.AppAttach),0) aat,
           nvl(sum(c.AppAll),0) aal,
           nvl(sum(c.AppMargin),0) ama,
           nvl(sum(c.AppStaffer),0) ast,
           nvl(sum(c.AppSelf),0) ase,
           nvl(sum(c.AppCorp),0) aco
    from dwinfo a,dworgan b,dwcareer c
    where a.dwguid = b.dwguid(+) and a.dwguid = c.dwguid(+)
    group by cube(a.UnitSys2_dictname)显示如下:
                JGS   XJGS  SJGS  TOTAL  AAF  AAT   AAL   AMA  AST   ASE   ACO
    ---------------------------------------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
                0     0      0     0     0    0     0     0      0    0     0
    合计        3     1     2     601    0   200    35    35     0    326   5
    教育系统    2     1     1     389    0    0     32    32     0    323   2
    卫生系统    1     0     1     212    0   200    3     3      0     3    3已选择4行怎么上面多出一行全部是为0的情况,怎么回事,请问?