本帖最后由 hh371011618 于 2010-09-15 20:41:16 编辑

解决方案 »

  1.   

    select decode(grouping(商品名),1,'all',商品名),销售员,单价,规格,
    decode(grouping(to_char(时间,'yyyy-mm')),1,to_char(时间,'yyyy-mm'),to_char(时间,'yyyy-mm'))
    sum(数量)
    from tt 
    group by rollup(商品名,销售员,单价,规格,to_char(时间,'yyyy-mm'))
      

  2.   


    --不知道满足你的要求不?WITH a AS(
    SELECT 'A' 商品名,'D1' 销售员,2 数量,2 单价,'A' 规格,To_Date('2010.8.31','yyyy.mm.dd') 时间  FROM DUAL UNION ALL
    SELECT 'B', 'D1', 6, 3, 'B', To_Date('2010.8.1','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'C', 'D2', 4, 4, 'C', To_Date('2010.8.6','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'B', 'D2', 2, 3, 'B', To_Date('2010.9.4','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'C', 'D3', 5, 4, 'C', To_Date('2010.8.21','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'A', 'D3', 3, 2, 'A', To_Date('2010.8.2','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'A', 'D3', 4, 2, 'A', To_Date('2010.8.14','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'E', 'D1', 3, 3, 'E', To_Date('2010.8.7','yyyy.mm.dd') FROM DUAL UNION ALL
    SELECT 'E', 'D3', 5, 3, 'E', To_Date('2010.8.25','yyyy.mm.dd') FROM DUAL

    SELECT decode(grouping(销售员),1,'总计',商品名) 商品名 ,
           销售员,
           Max(单价) 单价,
           Max(规格) 规格,
           sum(数量) 数量,
           to_char(时间,'yyyy-mm') 时间
    FROM a
    GROUP BY rollup(to_char(时间,'yyyy-mm'),商品名,销售员) ;
    结果:
    商品名  销售员  单价  规格  数量   时间
    ------------------------------------
    A       D1     2    A     2   2010-08
    A       D3     2    A     7   2010-08
    总计             2    A     9   2010-08
    B       D1     3    B     6   2010-08
    总计             3    B     6   2010-08
    C       D2     4    C     4   2010-08
    C       D3     4    C     5   2010-08
    总计             4    C     9   2010-08
    E       D1     3    E     3   2010-08
    E       D3     3    E     5   2010-08
    总计             3    E     8   2010-08
    总计             4    E     32  2010-08
    B       D2     3    B     2   2010-09
    总计             3    B     2   2010-09
    总计             3    B     2   2010-09
    总计             4    E     34        
      

  3.   


    看看这个可以不? 
     --创建表
    create table 商品表 
    (
     商品名 varchar(100),
     销售员 varchar(100),
     数量 decimal(18,2),
     单价 decimal(18,2),
     规格 varchar(30),
     时间 varchar(50)
    )
    --插入
    insert into 商品表 values ('A','D1',2,2,'A','2010.8.31');
    insert into 商品表 values ('B','D1',6,3,'B','2010.8.1');
    insert into 商品表 values ('C','D2',4,4,'C','2010.8.6');
    insert into 商品表 values ('B','D2',2,3,'B','2010.9.4');
    insert into 商品表 values ('C','D3',5,4,'C','2010.8.21');
    insert into 商品表 values ('A','D3',3,2,'A','2010.8.2');
    insert into 商品表 values ('A','D3',4,2,'A','2010.8.14');
    insert into 商品表 values ('E','D1',3,3,'E','2010.8.7');
    insert into 商品表 values ('E','D3',5,3,'E','2010.8.25');
     
     --查询
     select * from (
      select * from (
    select 商品名,销售员,sum(数量) as 数量,sum(单价) as 单价,
    max(to_char(to_date(时间,'yyyy-MM-dd'),'yyyy-MM')) as 时间  from 商品表 group by 商品名,销售员 order by 商品名,销售员

      union    all
      select * from (
    select 商品名 ,'合计' as 销售员 , sum(数量) as 数量,sum(单价) as 单价,max(to_char(to_date(时间,'yyyy-MM-dd'),'yyyy-MM')) as 时间 
     from 商品表 group by 商品名 order by 商品名
     )  
     )  Temp order by 商品名,销售员
      

  4.   

    查询结果商品名 销售员 数量 单价 时间
    A D1 2 2 2010-08
    A D3 7 4 2010-08
    A 合计 9 6 2010-08
    B D1 6 3 2010-08
    B D2 2 3 2010-09
    B 合计 8 6 2010-09
    C D2 4 4 2010-08
    C D3 5 4 2010-08
    C 合计 9 8 2010-08
    E D1 3 3 2010-08
    E D3 5 3 2010-08
    E 合计 8 6 2010-08
      

  5.   

    SQL> edi
    已写入 file afiedt.buf  1   WITH tb AS(
      2   SELECT 'A' 商品名,'D1' 销售员,2 数量,2 单价,'A' 规格,To_Date('2010.8.31','yyyy.mm.dd') 时间
      3   FROM DUAL UNION ALL
      4   SELECT 'B', 'D1', 6, 3, 'B', To_Date('2010.8.1','yyyy.mm.dd') FROM DUAL UNION ALL
      5   SELECT 'C', 'D2', 4, 4, 'C', To_Date('2010.8.6','yyyy.mm.dd') FROM DUAL UNION ALL
      6   SELECT 'B', 'D2', 2, 3, 'B', To_Date('2010.9.4','yyyy.mm.dd') FROM DUAL UNION ALL
      7   SELECT 'C', 'D3', 5, 4, 'C', To_Date('2010.8.21','yyyy.mm.dd') FROM DUAL UNION ALL
      8   SELECT 'A', 'D3', 3, 2, 'A', To_Date('2010.8.2','yyyy.mm.dd') FROM DUAL UNION ALL
      9   SELECT 'A', 'D3', 4, 2, 'A', To_Date('2010.8.14','yyyy.mm.dd') FROM DUAL UNION ALL
     10   SELECT 'E', 'D1', 3, 3, 'E', To_Date('2010.8.7','yyyy.mm.dd') FROM DUAL UNION ALL
     11   SELECT 'E', 'D3', 5, 3, 'E', To_Date('2010.8.25','yyyy.mm.dd') FROM DUAL
     12   )
     13   select 商品名,销售员,时间,单价,规格,数量汇总
     14  from
     15   (select 商品名,nvl(销售员,商品名||'总计') 销售员,to_char(时间,'yyyymm') 时间,
     16   grouping(to_char(时间,'yyyymm')) sj,
     17   grouping(销售员) pm,
     18   max(单价) 单价,max(规格) 规格,sum(数量) 数量汇总
     19   from tb
     20   group by rollup(商品名,to_char(时间,'yyyymm'),销售员))
     21* where (sj,pm) in((0,0),(0,1))
    SQL> /  销售  时间         单价     数量汇总
    - ----- ------ ---------- - ----------
    A D1    201008          2 A          2
    A D3    201008          2 A          7
    A A总计 201008          2 A          9
    B D1    201008          3 B          6
    B B总计 201008          3 B          6
    B D2    201009          3 B          2
    B B总计 201009          3 B          2
    C D2    201008          4 C          4
    C D3    201008          4 C          5
    C C总计 201008          4 C          9
    E D1    201008          3 E          3  销售  时间         单价     数量汇总
    - ----- ------ ---------- - ----------
    E D3    201008          3 E          5
    E E总计 201008          3 E          8已选择13行。
      

  6.   

    SELECT decode(grouping(销售员),1,'总计',商品名) 商品名 ,
           销售员,
           Max(单价) 单价,
           Max(规格) 规格,
           sum(数量) 数量,
           to_char(时间,'yyyy-mm') 时间
    FROM a
    GROUP BY 商品名,rollup(销售员),to_char(时间,'yyyy-mm') ;
      

  7.   


    --创建表
    create table 商品表 
    (
     商品名 varchar(100),
     销售员 varchar(100),
     数量 decimal(18,2),
     单价 decimal(18,2),
     规格 varchar(30),
     时间 varchar(50)
    )
    select * from 商品表 where 商品名 like '%';
    --插入
    insert into 商品表 values ('A','D1',2,2,'A','2010.8.31');
    insert into 商品表 values ('B','D1',6,3,'B','2010.8.1');
    insert into 商品表 values ('C','D2',4,4,'C','2010.8.6');
    insert into 商品表 values ('B','D2',2,3,'B','2010.9.4');
    insert into 商品表 values ('C','D3',5,4,'C','2010.8.21');
    insert into 商品表 values ('A','D3',3,2,'A','2010.8.2');
    insert into 商品表 values ('A','D3',4,2,'A','2010.8.14');
    insert into 商品表 values ('E','D1',3,3,'E','2010.8.7');
    insert into 商品表 values ('E','D3',5,3,'E','2010.8.25');
    insert into 商品表 values ('','D3',5,3,'E','2010.8.25');
     
     --查询
    select *
      from (select *
              from (select 商品名,
                           销售员,
                           sum(数量) as 数量,
                           sum(单价) as 单价,
                           max(to_char(to_date(时间, 'yyyy-MM-dd'), 'yyyy-MM')) as 时间
                      from 商品表
                     group by 商品名, 销售员
                     order by 商品名, 销售员)
            union all
            select *
              from (select 商品名,
                           '合计' as 销售员,
                           sum(数量) as 数量,
                           sum(单价) as 单价,
                           max(to_char(to_date(时间, 'yyyy-MM-dd'), 'yyyy-MM')) as 时间
                      from 商品表
                     group by 商品名
                     order by 商品名)) Temp
     order by 商品名, 销售员
    --
    商品名 销售员 数量 单价 时间
    A D1 2 2 Aug-10
    A D3 7 4 Aug-10
    A 合计 9 6 Aug-10
    B D1 6 3 Aug-10
    B D2 2 3 Sep-10
    B 合计 8 6 Sep-10
    C D2 4 4 Aug-10
    C D3 5 4 Aug-10
    C 合计 9 8 Aug-10
    E D1 3 3 Aug-10
    E D3 5 3 Aug-10
    E 合计 8 6 Aug-10
    D3 5 3 Aug-10
    合计 5 3 Aug-10