明细表有如下字段:
   机构  物料  单价   数量   金额 现想分机构求金额和,但明细也要有,就是这种结果:
    机构   物料   单价   数量   金额    
   总装    扳手    2      2       4
   总装    起子    2      1       2
总装合计                          6
   注塑    原料   100    2       200
   注塑    辅料   120    2       240
注塑合计                         440
.......这个SQL语句该如何写?

解决方案 »

  1.   

    declare @ta table( name varchar(10),type varchar(5),price int,number int, [sum] int)
    insert @ta select '注塑',    '原料',   100,    2,       200
    insert @ta select '注塑',    '辅料',   120,    2,       240select [name]=case when grouping(name)=1 then '总合计' else [name] end
    ,type,price,number,[sum]=sum([sum])
    from @ta
    group by name,type,price,number with rollup 
    having grouping(name)=1 or (grouping(type)=0 and grouping(price)=0 and grouping(number)=0)(1 行受影响)(1 行受影响)
    name       type  price       number      sum
    ---------- ----- ----------- ----------- -----------
    注塑         辅料    120         2           240
    注塑         原料    100         2           200
    总合计        NULL  NULL        NULL        440(3 行受影响)
      

  2.   

    declare @t table(机构 varchar(10),物料 varchar(10),单价 int,数量 int,金额 int)
    insert into @t select    
       '总装',    '扳手',    2,      2,       4 union all select 
       '总装',    '起子',    2,      1,       2 union all select   
       '注塑',    '原料',   100,    2,       200 union all select 
       '注塑',    '辅料',   120,    2,       240select a.机构,a.物料,b.单价,b.数量,a.金额 from
    (select 机构,物料,sum(金额) 金额 from @t group by 机构,物料 with rollup having grouping(机构)=0) a 
    left join 
    @t b on a.机构=b.机构 and a.物料=b.物料
      

  3.   

    不好意思,您是指例子,SORRY
      

  4.   

    declare @t table(机构 varchar(10),物料 varchar(10),单价 int,数量 int,金额 int)
    insert into @t select    
       '总装',    '扳手',    2,      2,       4 union all select 
       '总装',    '起子',    2,      1,       2 union all select  
       '总装',    '起子',    2,      1,       2 union all select  
       '注塑',    '原料',   100,    2,       200 union all select 
       '注塑',    '辅料',   120,    2,       240select a.机构,a.物料,b.单价,b.数量,isnull(b.金额,a.金额) 金额 from
    (select case when grouping(物料)=0 then 机构 else 机构+'合计' end 机构,物料,sum(金额) 金额 from @t group by 机构,物料 with rollup having grouping(机构)=0) a 
    left join 
    @t b on a.机构=b.机构 and a.物料=b.物料
      

  5.   

    不好意思,偶太菜了,还是没搞定,实例比这个列多很多,我贴出来吧:
    表结构:
    成本中心代码, 成本中心, 入库单号,采购员,采购订单号,采购订单行号,物料编码,物料描述,订货数量,单位,接收数量,单价,金额,接收日期显示明细,然后对每个成本中心的金额求和查询结果希望达到:
    成本中心代码, 成本中心, 入库单号,采购员,采购订单号,采购订单行号,物料编码,物料描述,
    订货数量,单位,接收数量,单价,金额,接收日期051806  锅类总装车间  R170304009  李闺  P170213002  003  303800200465 电磁阀 
     1.0 个  1.0 148  148  2007-03-04  
    051806  锅类总装车间  R170304009  李闺  P170213001  002  303800200466 割A3板
     1.0 个  1.0 20  20  2007-03-04051806  锅类总装车间合计    168  
    0518    计划采购中心  R170304009  张三  P170213004  001  303800100465 白纸 
     2.0 包  2.0 22  44  2007-03-04  
    0518    计划采购中心  R170304009  张三  P170213005  001  303800100466 笔记本
     10 个  10 20  200  2007-03-04051806  计划采购中心        244 
    。 
            
      

  6.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb(机构 varchar(10),物料 varchar(10),单价 int,数量 int,金额 int)
    insert into tb(机构,物料,单价,数量,金额) values('总装',    '扳手',   2 ,     2,       4)
    insert into tb(机构,物料,单价,数量,金额) values('总装',    '起子',   2 ,     1,       2)
    insert into tb(机构,物料,单价,数量,金额) values('注塑',    '原料',   100,    2,       200)
    insert into tb(机构,物料,单价,数量,金额) values('注塑',    '辅料',   120,    2,       240)
    goselect * from
    (
      select * from tb
      union all
      select 机构 = 机构+'合计' , 物料 = null,单价 = null ,数量 = null, sum(金额) 金额 from tb group by 机构
    ) t
    order by 机构drop table tb/*
    机构             物料         单价          数量          金额          
    -------------- ---------- ----------- ----------- ----------- 
    注塑             原料         100         2           200
    注塑             辅料         120         2           240
    注塑合计         NULL       NULL        NULL        440
    总装             扳手         2           2           4
    总装             起子         2           1           2
    总装合计         NULL       NULL        NULL        6(所影响的行数为 6 行)
    */
      

  7.   

    照着dawugui(潇洒老乌龟) ( )或zsforever(虎虎) ( )  例子填字段就可
      

  8.   

    dawugui(潇洒老乌龟) 的性能上是否比zsforever(虎虎)的要差?