有个表结构如下
项目名称 金额
上月结存金额 4000
本月采购入库 3100
本月调拨入库 600
部门领用出库 3900
本月调拨出库 500我现在想按照计算方法 上月结存金额+本月采购入库+本月调拨入库-部门领用出库-本月调拨出库=本月结存金额
最后得出来的本月结存金额再添加到表中,得到如下的结构
项目名称 金额
上月结存金额 4000
本月采购入库 3100
本月调拨入库 600
部门领用出库 3900
本月调拨出库 500
本月结存金额 XXXSQL语句该怎么写呢?
项目名称 金额
上月结存金额 4000
本月采购入库 3100
本月调拨入库 600
部门领用出库 3900
本月调拨出库 500我现在想按照计算方法 上月结存金额+本月采购入库+本月调拨入库-部门领用出库-本月调拨出库=本月结存金额
最后得出来的本月结存金额再添加到表中,得到如下的结构
项目名称 金额
上月结存金额 4000
本月采购入库 3100
本月调拨入库 600
部门领用出库 3900
本月调拨出库 500
本月结存金额 XXXSQL语句该怎么写呢?
select * from tb
union all
select 项目名称 = '本月结存金额' , sum(case when 项目名称 in ('上月结存金额','本月采购入库','本月调拨入库') when 金额 else - 金额 end) from tb
本月结存金额 AS 上月结存金额+本月采购入库+本月调拨入库-部门领用出库-本月调拨出库
GO
insert into tb values('上月结存金额', 4000)
insert into tb values('本月采购入库', 3100)
insert into tb values('本月调拨入库', 600)
insert into tb values('部门领用出库', 3900)
insert into tb values('本月调拨出库', 500)
goselect * from tb
union all
select 项目名称 = '本月结存金额' , sum(case when 项目名称 in ('上月结存金额','本月采购入库','本月调拨入库') then 金额 else - 金额 end) from tb drop table tb/*
项目名称 金额
-------------------- -----------
上月结存金额 4000
本月采购入库 3100
本月调拨入库 600
部门领用出库 3900
本月调拨出库 500
本月结存金额 3300(所影响的行数为 6 行)
*/
union all
select level=1,'本月结存金额',sum(case 项目名称 when '上月结存金额' then 金额
when '本月采购入库' then 金额
when '本月调拨入库' then 金额
when '部门领用出库' then 金额*(-1)
when '本月调拨出库' then 金额*(-1)
end
) from tb
SELECT '本月结存金额',SUM(金额) FROM
(SELECT 金额=-金额 FROM tb WHERE 项目名称 IN('部门领用出库','本月调拨出库')
UNION ALL
SELECT 金额 FROM tb WHERE 项目名称 NOT IN('部门领用出库','本月调拨出库')) a
SELECT * FROM tb