日期:2014-05-19  浏览次数:20415 次

求SQL语句(求和的)
明细表有如下字段:
      机构     物料     单价       数量       金额  

现想分机构求金额和,但明细也要有,就是这种结果:
        机构       物料       单价       数量       金额        
      总装         扳手         2             2               4
      总装         起子         2             1               2
总装合计                                                     6
      注塑         原料       100         2               200
      注塑         辅料       120         2               240
注塑合计                                                   440
.......

这个SQL语句该如何写?




------解决方案--------------------
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, 240

select 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.物料
------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create 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)
go

select * 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 行)
*/