欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle依据3个分组,相同数据显示为空,算出3个小计,最后算出总计

更新时间: 2014-01-05 02:12:50 责任编辑: Author_N1

 

oracle根据3个分组,相同数据显示为空,算出3个小计,最后算出总计
根据3个分组,相同数据显示为空,算出3个小计,最后算出总计

create table T_Goods
(
GId varchar2(10) not null,
GName varchar2(20) not null,
GColour varchar2(10),
GWithin int,
GSize varchar2(10),
GNumber int


insert into T_Goods values('A01','上衣','红',0,'S',10);
insert into T_Goods values('A01','上衣','红',0,'M',20);
insert into T_Goods values('A01','上衣','白',0,'L',30);
insert into T_Goods values('A01','下衣','红',0,'S',10);
insert into T_Goods values('A01','下衣','白',0,'M',20);
insert into T_Goods values('A01','下衣','黑',0,'L',30);
insert into T_Goods values('A02','上衣','红',0,'S',5);
insert into T_Goods values('A02','上衣','白',0,'M',15);
insert into T_Goods values('A02','下衣','红',0,'S',5);
insert into T_Goods values('A02','下衣','白',0,'M',15);
--参考方法--
select row_number() over(order by gid, gname, gcolour, gsize) num,
       decode(row_number()
              over(partition by gid order by gid, gname, gcolour,gsize),
              '1',
              gid,
              '') gid1,
       decode(row_number()
              over(partition by gid,gname order by  gid,gname, gcolour,gsize),
              '1',
              gname,
              '') gname1,
       decode(row_number()
              over(partition by gid, gname,gcolour order by gid, gname, gcolour,gsize),
              '1',
              gcolour,
              '') gcolour1,
       case
         when gid is not null and gname is null and gcolour is null then
          'gid小计'
         when gid is not null and gname is not null and gcolour is null then
          'gname小计'
         when gid is not null and gname is not null and gcolour is not null and
              gsize is null then
          'gcolour小计'
         when gid is null and gname is null then
          '总计'
         else
          gsize
       end gsize1,
       sum(gwithin) gwithin,
       sum(gnumber) gnumber
  from t_goods t
 group by rollup(gid, gname, gcolour, (gwithin, gsize, gnumber))
 order by gid, gname, gcolour, gsize

--参考方法--
引用:
select row_number() over(order by gid, gname, gcolour, gsize) num,
       decode(row_number()
              over(partition by gid order by gid, gname, gcolour,gsize),
              '1',
              gid,
              '') gid1,
       decode(row_number()
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:12:50
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7040/
本文WWW.DOC100.NET DOC100.NET版权所有。