Type的取值Type valude
1 A业务
2 B业务
3 C业务表中的数据为:
name Code Type fee1 fee2 fee3
公司1 06766100063 1 20.00 30.00 40.00
公司2 06066 1 30.00 20.00 10.00
公司3 040506 2 10.00 20.00 30.00
公司4 09981 2 10.00 10.00 10.00
公司5 075523 3 20.00 20.00 20.00
公司6 06766010170 3 20.00 20.00 20.00能否用一条SQL搞定?group by rollup or groupingname Code Type fee1 fee2 fee3
公司1 06766100063 1 20.00 30.00 40.00
公司2 06066 1 30.00 20.00 10.00
A业务小计 小计 50.00 50.00 50.00
公司3 040506 2 10.00 20.00 30.00
公司4 09981 2 10.00 10.00 10.00
B业务 小计 20.00 30.00 40.00
公司5 075523 3 20.00 20.00 20.00
公司6 06766010170 3 20.00 20.00 20.00
C业务小计 小计 40.00 40.00 40.00
所有业务总计 总计 110.00 120.00 130.00

解决方案 »

  1.   

    select * from (
    select * from tb
    union
    select a.valude,b.* from
    ( select '小计' code,type,sum(fee1) fee1,sum(fee2) fee2,sum(fee3) fee3 from tb  group by type  )   b
    left join ta a  on a.type=b.type
    Union
    select '所有业务总计' name ,'总计' code,null type,sum(fee1) fee1,sum(fee2) fee2,sum(fee3) fee3 from tb
    ) order by type
      

  2.   

    A业务 小计 1 50 50 50
    公司1 06766100063 1 20 30 40
    公司2 06066 1 30 20 10
    B业务 小计 2 20 30 40
    公司4 09981 2 10 10 10
    公司3 040506 2 10 20 30
    C业务 小计 3 40 40 40
    公司5 075523 3 20 20 20
    公司6 06766010170 3 20 20 20
    所有业务总计 总计 110 120 130
      

  3.   

    select * from (
    select * from tb
    union
    select a.valude,b.* from
    ( select '小计' code,type,sum(fee1) fee1,sum(fee2) fee2,sum(fee3) fee3 from tb  group by type  )   b
    left join ta a  on a.type=b.type
    Union
    select '所有业务总计' name ,'总计' code,null type,sum(fee1) fee1,sum(fee2) fee2,sum(fee3) fee3 from tb
    ) order by type ,fee1
      

  4.   

    select nvl(name,decode(Type,1,'A業務',2,'B業務',3,'C業務','合計')),
    decode(nvl(name,0),0,decode(nvl(Type,0),0,'合計','小計',max(code)),
    decode(nvl(name,0),0,'',to_char(Type)),
    sum(fee1),sum(fee2),sum(fee3)
    group by rollup(Type,name)
      

  5.   

    sql server 下測試
    ==============================================
    declare @tt table(name varchar(20),Code varchar(50),Type int,fee1 float,fee2 float,fee3 float)
    insert into @tt
    select '公司1', '06766100063', 1 ,20.00, 30.00 ,40.00 union all 
    select '公司2', '06066', 1 ,30.00, 20.00, 10.00 union all 
    select '公司3', '040506', 2, 10.00, 20.00, 30.00 union all 
    select '公司4', '09981', 2 ,10.00, 10.00, 10.00 union all 
    select '公司5', '075523', 3, 20.00, 20.00, 20.00 union all 
    select '公司6', '06766010170' ,3, 20.00, 20.00, 20.00
    select  isnull(name,case when Type=1 then 'A' when Type=2 then 'B' when Type=3 then 'C' else '合計' end),
    case when isnull(name,'')='' then 
      case when isnull(Type,'')='' then '合計' else '小計' end   else max(Code) end,
    case when isnull(name,'')='' then '' else cast(Type as varchar(2)) end ,sum(fee1),sum(fee2),sum(fee3)
    from @tt
    group by Type,[name] with rollup
    ==============================
    公司1 06766100063 1 20.0 30.0 40.0
    公司2 06066 1 30.0 20.0 10.0
    A 小計 50.0 50.0 50.0
    公司3 040506 2 10.0 20.0 30.0
    公司4 09981 2 10.0 10.0 10.0
    B 小計 20.0 30.0 40.0
    公司5 075523 3 20.0 20.0 20.0
    公司6 06766010170 3 20.0 20.0 20.0
    C 小計 40.0 40.0 40.0
    合計 合計 110.0 120.0 130.0
      

  6.   

    select decode(grouping_id(tb.type,ROWNUM),3,'总计',decode(GROUPING(ROWNUM), 1, max(ta.valude), MAX(tb.name))) name,
    decode(grouping_id(tb.type,ROWNUM),3,'总计_code',decode(GROUPING(ROWNUM), 1, '小计CODE', MAX(tb.code))) code,
    decode(GROUPING(ROWNUM), 1, NULL, MAX(tb.type)) type,
    SUM(tb.fee1) fee1,SUM(tb.fee2) fee2,SUM(tb.fee3) fee3
    FROM   ta, tb
    WHERE  ta.type = tb.type
    GROUP  BY ROLLUP(tb.type, ROWNUM)
      

  7.   

    还有就是,要对里面的费用字段排序,怎么排??
    我试了一下,好像,不行?
    order by fee3  desc
    原来那些的小计和汇总都不按原来的顺序了
    ???