部门表 职员表 薪资表
怎么实现如下视图 ?deptid deptname employeeid employeename money
01 业务部 01 刘备 1000
小记 1000
02 研发部 02 关羽 2000
02 研发部 03 张飞 3000
小记 5000
03 实施部 04 马超 4000
03 实施部 05 黄盖 5000
小记 9000
总计 15000
怎么实现如下视图 ?deptid deptname employeeid employeename money
01 业务部 01 刘备 1000
小记 1000
02 研发部 02 关羽 2000
02 研发部 03 张飞 3000
小记 5000
03 实施部 04 马超 4000
03 实施部 05 黄盖 5000
小记 9000
总计 15000
01 业务部 01 刘备 1000
小记 1000
02 研发部 02 关羽 2000
02 研发部 03 张飞 3000
小记 5000
03 实施部 04 马超 4000
03 实施部 05 黄盖 5000
小记 9000
总计 15000
给你个我整理的例子,希望对你有帮助!
原始数据
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
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>
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行。
--美化下
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行。
已写入 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行。