有三个表 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谢谢
表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谢谢
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;
做一个视图:dd
id 单位类型dwtype 单位系统dwxt 编制数bzs
1 机关 教育 2
2 事业 党委 3
3 事业 党委 5
select 单位系统,aaa(单位系统),bbb(单位系统) from dd group by 单位系统两个函数aaa,bbb分别用于计算 (合计,机关数,事业数) 和 编制数(合计,机关编制数,事业编制数)
但是完全用一条语句,我不知道如何解决。
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
单位系统 (合计 机关数 事业数) 编制数(合计 机关 编制数 事业编制数)
教育 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行
谢谢各位
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的情况,怎么回事,请问?