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