有个表结构如下
项目名称                金额
上月结存金额            4000
本月采购入库            3100
本月调拨入库            600
部门领用出库            3900
本月调拨出库            500我现在想按照计算方法   上月结存金额+本月采购入库+本月调拨入库-部门领用出库-本月调拨出库=本月结存金额
最后得出来的本月结存金额再添加到表中,得到如下的结构
项目名称                金额
上月结存金额            4000
本月采购入库            3100
本月调拨入库            600
部门领用出库            3900
本月调拨出库            500
本月结存金额            XXXSQL语句该怎么写呢?

解决方案 »

  1.   

    是不是只有这几个内容?
    select * from tb
    union all
    select 项目名称 = '本月结存金额' , sum(case when 项目名称 in ('上月结存金额','本月采购入库','本月调拨入库') when 金额 else - 金额 end) from tb 
      

  2.   

    ALTER TABLE dbo.tb ADD
    本月结存金额 AS 上月结存金额+本月采购入库+本月调拨入库-部门领用出库-本月调拨出库
    GO
      

  3.   

    create table tb(项目名称 varchar(20),金额 int)
    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 行)
    */
      

  4.   

    select level=0,* from tb 
    union all
    select level=1,'本月结存金额',sum(case 项目名称 when '上月结存金额' then 金额
    when '本月采购入库' then 金额
    when '本月调拨入库' then 金额
    when '部门领用出库' then 金额*(-1)
    when '本月调拨出库' then 金额*(-1)
    end
      ) from tb
      

  5.   

    INSERT INTO tb 
    SELECT '本月结存金额',SUM(金额)  FROM 
    (SELECT 金额=-金额 FROM tb WHERE 项目名称 IN('部门领用出库','本月调拨出库')
    UNION ALL 
    SELECT 金额 FROM tb WHERE 项目名称 NOT IN('部门领用出库','本月调拨出库')) a
    SELECT * FROM tb
      

  6.   

    sum(中间用case语句根据不同情况+或-)