查询前
序号    货品编号    名称    颜色    内长    尺寸    数量
1         A01       上衣    红       0       S       10     
2         A01       上衣    白       0       M       20
3         A01       上衣    黑       0       L       30
4         A02       下衣    红       0       S       5
5         A02       下衣    白       0       M       15
查询后
序号    货品编号    名称    颜色    内长    尺寸    数量
1         A01       上衣    红       0       S       10     
2                           白       0       M       20
3                           黑       0       L       30
4                                           小计     60      
5         A02       下衣    红       0       S       5
6                           白       0       M       15
7                                           小计     20H

解决方案 »

  1.   

    查询前
    序号    货品编号    名称    颜色    内长    尺寸    数量
    1         A01       上衣    红       0       S       10     
    2         A01       上衣    白       0       M       20
    3         A01       上衣    黑       0       L       30
    4         A02       下衣    红       0       S       5
    5         A02       下衣    白       0       M       15
    查询后
    序号    货品编号    名称    颜色    内长    尺寸    数量
    1         A01       上衣    红       0       S       10     
    2                           白       0       M       20
    3                           黑       0       L       30
    4                                           小计     60      
    5         A02       下衣    红       0       S       5
    6                           白       0       M       15
    7                                           小计     20 
      

  2.   

    查询前
    序号    货品编号    名称    颜色    内长    尺寸    数量
    1         A01       上衣    红       0       S       10     
    2         A01       上衣    白       0       M       20
    3         A01       上衣    黑       0       L       30
    4         A02       下衣    红       0       S       5
    5         A02       下衣    白       0       M       15
    查询后
    序号    货品编号    名称    颜色    内长    尺寸    数量
    1           A01       上衣    红       0       S       10     
    2                             白       0       M       20
    3                             黑       0       L       30
    4                                                小计     60      
    5           A02       下衣    红       0       S       5
    6                             白       0       M       15
    7                                                小计     20 
      

  3.   

    看看行不行:WITH T AS
    (            
    select 1 序号,'A01' 货品编号,'上衣' 名称,'红' 颜色,0 内长,'S' 尺寸,10 数量 from dual union all  
    select 2 序号,'A01' 货品编号,'上衣' 名称,'白' 颜色,0 内长,'M' 尺寸,20 数量 from dual union all  
    select 3 序号,'A01' 货品编号,'上衣' 名称,'黑' 颜色,0 内长,'L' 尺寸,30 数量 from dual union all  
    select 4 序号,'A02' 货品编号,'下衣' 名称,'红' 颜色,0 内长,'S' 尺寸,5  数量 from dual union all  
    select 5 序号,'A02' 货品编号,'下衣' 名称,'白' 颜色,0 内长,'M' 尺寸,15 数量 from dual
    )
    select row_number()over(order by 货品编号,名称,颜色,内长,尺寸,数量)序号,
           货品编号,名称,颜色,内长,尺寸,数量 from(
    SELECT 货品编号,名称,颜色,内长,尺寸,数量 FROM T 
    UNION ALL
    SELECT 货品编号,名称,NULL,NULL,'小计',sum(数量) FROM T GROUP BY 货品编号,名称
    )
    order by 货品编号,名称,颜色,内长,尺寸,数量; 
            序号 货品编号 名称 颜色         内长 尺寸         数量
    ---------- -------- ---- ---- ---------- ---- ----------
             1 A01      上衣 白            0 M            20
             2 A01      上衣 黑            0 L            30
             3 A01      上衣 红            0 S            10
             4 A01      上衣                 小计         60
             5 A02      下衣 白            0 M            15
             6 A02      下衣 红            0 S             5
             7 A02      下衣                 小计         20
     
    7 rows selected
      

  4.   

    小计算出来了,相同数据没有设置为空
    要这样的结果,请您帮忙再修改下,谢谢您
    这是我的数据结构
    create table T_Goods
    (
    Id int primary key,
    GId varchar2(10) not null,
    GName varchar2(20) not null,
    GColour varchar2(10),
    GWithin int,
    GSize varchar2(10),
    GNumber int
    ) CREATE SEQUENCE seq_goods  
         INCREMENT BY 1     
         START WITH 1     
         NOMAXVALUE       
         NOCYCLE          
         CACHE 10;  
         
    insert into T_Goods values(seq_goods.nextval,'A01','上衣','红',0,'S',10);
    insert into T_Goods values(seq_goods.nextval,'A01','上衣','白',0,'M',20);
    insert into T_Goods values(seq_goods.nextval,'A01','上衣','黑',0,'L',30);
    insert into T_Goods values(seq_goods.nextval,'A02','下衣','红',0,'S',5);
    insert into T_Goods values(seq_goods.nextval,'A02','下衣','白',0,'M',15);
      

  5.   


    with t as
     (select GId, gname, gcolour, gwithin, gsize, sum(gnumber) gnumber
        from t_goods
       group by GId, gname, gcolour, gwithin, gsize
      union all
      select gid, gname, null, null, '小计', sum(gnumber)
        from t_goods
       group by gid, gname)
    select rownum seq,
           decode(rn, 1, gid) gid,
           decode(rn, 1, gname) gname,
           gcolour,
           gwithin,
           gsize,
           gnumber
      from (select t.*, row_number() over(partition by gid order by gnumber) rn
              from t);
      

  6.   

    楼主该好好学习了:with t as
     (select GId, gname, gcolour, gwithin, gsize, sum(gnumber) gnumber
        from t_goods
       group by GId, gname, gcolour, gwithin, gsize
      union all
      select gid, gname, null, null, '小计', sum(gnumber)
        from t_goods
       group by gid, gname
      union all
      select null, null, null, null, '总计', sum(gnumber)
      from t_goods
     )
    select rownum seq,
           decode(rn, 1, gid) gid,
           decode(rn, 1, gname) gname,
           gcolour,
           gwithin,
           gsize,
           gnumber
      from (select t.*, row_number() over(partition by gid order by gnumber) rn from t);       SEQ GID        GNAME                GCOLOUR       GWITHIN GSIZE         GNUMBER
    ---------- ---------- -------------------- ---------- ---------- ---------- ----------
             1 A01        上衣                 红                  0 S                  10
             2                                 白                  0 M                  20
             3                                 黑                  0 L                  30
             4                                                       小计               60
             5 A02        下衣                 红                  0 S                   5
             6                                 白                  0 M                  15
             7                                                       小计               20
             8                                                       总计               80
     
      

  7.   

    学习楼上:
    select --id,gid,
         row_number() over( order by gid,id) 序号,
         decode(row_number() over(partition by gid order by gid,id),'1',gid,'') 货品编号,
         decode(row_number() over(partition by gname order by gname,id),'1',gname,'') 名称,
         gcolour 颜色,
         gwithin 内长,
         case when id is null and gid is not null then '小计' 
      when id is null and gid is null then '总计' 
         else gsize end  尺寸,
         sum(gnumber) 数量
      from t_goods t
     group by rollup(gid, (id, gname, gcolour, gwithin, gsize, gnumber))
     order by gid,gname,id
      

  8.   

    lyliu602高人,还有没有其他方法实现,想多学习几种,谢谢
      

  9.   

    哥,根据以前的数据能达到这样的效果嘛,根据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);