Oracle 分组汇总

oracle 10g 中有关分组 小计和合计处理方法!!!

--1.首先创建一个表 
--drop table TE;
create table TE  
(  
  ID        VARCHAR2(2),  
  T_CODE    VARCHAR2(4),  
  T_NAME    VARCHAR2(4),  
  T_AMOUNT  number(10),  
  T_DEPT    VARCHAR2(4),  
  T_PROJECT VARCHAR2(4),  
  T_TYPE    VARCHAR2(1)  
);

--2.测试数据
insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('1', '1', '1', 10, '总部', '90', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('2', '2', '2', 20, '总部', '70', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('3', '3', '3', 30, '分1', '60', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('4', '4', '4', 40, '分1', '50', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('5', '5', '5', 50, '分2', '40', '0');

insert into te (ID, T_CODE, T_NAME, T_AMOUNT, T_DEPT, T_PROJECT, T_TYPE)
values ('6', '6', '6', 60, '分2', '30', '0');

--3.查询
select * from te;

 


--4.分组统计
select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by t.t_dept, t.t_project;

 

--5.用t.t_dept, t.t_project,并使用t.t_dept来做小计 
select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept);

 

 

--6.用t.t_dept, t.t_project,并使用t.t_dept来做小计,并做一次总计 
select t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null);


--7.使用grouping(字段)
select grouping(t.t_dept),grouping(t.t_project),t.t_dept, t.t_project, sum(t.t_amount) from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null);


--8.合计
select 
      case when grouping(t.t_dept)=1 and grouping(t.t_project)=1 then
                 '合计:'
           when grouping(t.t_dept)=0 and grouping(t.t_project)=1 then
                 '分组小计:'
           else
                 t.t_dept
           end  t_dept,
      case when grouping(t.t_dept)=0 and grouping(t.t_project)=0 then
                 t.t_project
           else
                 '0'
           end  t_project,
       
      sum(t.t_amount) count       
from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null); 


--9.分组
select 
      case when t.t_dept is null and t.t_project is null then
                 '合计'
           else
                 t.t_dept
           end  t_dept,
      case when t.t_dept is null and t.t_project is null then
                 '0'
           when t.t_dept is not null and t.t_project is null then
                 '分组小计:'
           else
                 t.t_dept
           end  t_dept,
       
      sum(t.t_amount) count       
from te t
group by grouping sets ((t.t_dept, t.t_project), t.t_dept, null); 



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值