明细表有如下字段:
机构 物料 单价 数量 金额 现想分机构求金额和,但明细也要有,就是这种结果:
机构 物料 单价 数量 金额
总装 扳手 2 2 4
总装 起子 2 1 2
总装合计 6
注塑 原料 100 2 200
注塑 辅料 120 2 240
注塑合计 440
.......这个SQL语句该如何写?
机构 物料 单价 数量 金额 现想分机构求金额和,但明细也要有,就是这种结果:
机构 物料 单价 数量 金额
总装 扳手 2 2 4
总装 起子 2 1 2
总装合计 6
注塑 原料 100 2 200
注塑 辅料 120 2 240
注塑合计 440
.......这个SQL语句该如何写?
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 行受影响)
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.物料
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.物料
表结构:
成本中心代码, 成本中心, 入库单号,采购员,采购订单号,采购订单行号,物料编码,物料描述,订货数量,单位,接收数量,单价,金额,接收日期显示明细,然后对每个成本中心的金额求和查询结果希望达到:
成本中心代码, 成本中心, 入库单号,采购员,采购订单号,采购订单行号,物料编码,物料描述,
订货数量,单位,接收数量,单价,金额,接收日期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
。
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 行)
*/