group by 
with cube

解决方案 »

  1.   

    这种事不是SQL擅长的,解决方案
    1. 发到SQL版区等牛人解决
    2. 自己用程序解决
      

  2.   

    /******************************************/
    /*回复:代码20080513001 总:00000000008    */
    /*主题:行转列,汇总查询                   */
    /*作者:二等草                             */
    /******************************************//************例子数据 begin****************/
    create table cat(fid int, name  varchar(20),flevel int)
    create table cucard(CatID int,fnumber varchar(10),fmoney int)
    insert cat select  1,   '计算机'    ,1         
    insert cat select  2 ,  '计算机-1'  ,2          
    insert cat select  3  , '计算机-1-1',3           
    insert cat select  4   ,'房屋'      ,1           
    insert cat select  5  , '房屋-1'    ,2           
    insert cat select  6 ,  '房屋-1-1'  ,3         
    insert cat select  7,   '房屋-1-2'  ,3        
    insert cat select  8  , '房屋-2'    ,2           
    insert cat select  9 ,  '房屋-2-1'  ,3         
    insert cat select  10,   '房屋-2-2'  ,3        
    insert cucard select 1,   '06'      ,5000.00
    insert cucard select 2 ,  '0601'    ,5000.00
    insert cucard select 3  , '060101'  ,5000.00
    insert cucard select 4   ,'07'      ,7500.00
    insert cucard select 5  , '0701'    ,7500.00
    insert cucard select 6 ,  '070101'  ,3500.00
    insert cucard select 7,   '070102'  ,4000.00
    insert cucard select 8  , '0702'    ,7500.00
    insert cucard select 9 ,  '070201'  ,3500.00
    insert cucard select 10,   '070202'  ,4000.00
    go
    /************例子数据 end******************//************代码     begin***************/ select a1,a2,a3,bm,m into # 
     from 
       (select name a1 from cat where flevel = 1) a,
       (select name a2  from cat where flevel = 2) b,
       (select name a3,fnumber bm,fmoney m from cat,cucard where flevel = 3 and fid = catid) c
     where a2 like a1+'%' and a3 like a2+'%' select
       第一级= case when         a+b+c=3 then '合计' else case when a+b+c = 0 then a1 else '' end end
      ,第二级= case when   a=0 and b+c=2 then '小机' else case when a+b+c = 0 then a2 else '' end end
      ,第三级= case when a+b=0   and c=1 then '小计' else case when a+b+c = 0 then a3 else '' end end
      ,编码  = case when             c=1 then    '' else case when a+b+c = 0 then bm else '' end end
      ,钱    = m 
     from
       (select a1,a2,a3,(select bm from # where a3 = a.a3) bm ,sum(m) m 
               ,grouping(a1) a,grouping(a2) b,grouping(a3) c
         from # a group by a1,a2,a3 with rollup
       ) a drop table #
     go
    /************代码     end*****************//************结果     begin***************
    第一级                  第二级                  第三级                  编码         钱           
    -------------------- -------------------- -------------------- ---------- ----------- 
    房屋                   房屋-1                 房屋-1-1               070101     3500
    房屋                   房屋-1                 房屋-1-2               070102     4000
                                              小计                              7500
    房屋                   房屋-2                 房屋-2-1               070201     3500
    房屋                   房屋-2                 房屋-2-2               070202     4000
                                              小计                              7500
                         小机                                                   15000
    计算机                  计算机-1                计算机-1-1              060101     5000
                                              小计                              5000
                         小机                                                   5000
    合计                                                                        20000 ************结果     end*****************//************清除*************************/
    drop table cat,cucard
      

  3.   

    这个发到SQL版好一些,比较复杂