insert tmp
select 名称,型号,单价,上月库存数量,上月库存金额,本月入库数量,本月入库金额,本月出库数量,本月出库金额,上月库存数量+本月入库数量-本月出库数量,
上月库存金额量+本月入库金额-本月出库金额     
from (
select a.名称,a.型号,a.单价,a.数量 上月库存数量,a.金额 上月库存金额,sum(isnull(b.数量,0)) 本月入库数量,sum(isnull(b.金额,0)) 本月入库金额,
sum(isnull(c.数量,0)) 本月出库数量,sum(isnull(c.金额,0)) 本月出库金额
from 库存表 a
left join 入库表 b on a.名称=b.名称 and a.型号=b.型号 and year(b.入库日期)=当前年 and month(b.入库日期)=当前月
left join 出库表 c on a.名称=c.名称 and a.型号=c.型号 and year(c.出库日期)=当前年 and month(c.出库日期)=当前月) a

解决方案 »

  1.   

    --更正
    insert tmp
    select a.名称,a.型号,a.单价,a.数量 上月库存数量,a.金额 上月库存金额,b.数量 本月入库数量,b.金额 本月入库金额,
    c.数量 本月出库数量,c.金额 本月出库金额,a.数量+b.数量-c.数量,a.金额+b.金额-c.金额
    from 库存表 a
    left join (select 名称,型号,sum(isnull(数量,0)) 数量,sum(isnull(金额,0)) 金额 from 入库表  where year(入库日期)=当前年 and month(入库日期)=当前月 group by 名称,型号) b on a.名称=b.名称 and a.型号=b.型号 
    left join (select 名称,型号,sum(isnull(数量,0)) 数量,sum(isnull(金额,0)) 金额 from 出库表  where year(出库日期)=当前年 and month(出库日期)=当前月 group by 名称,型号) c on a.名称=c.名称 and a.型号=c.型号 
      

  2.   

    sdhdy(大江东去...) :应该是本月初库存?
      

  3.   

    看的我眼花缭乱
    left join  是社么意思?
      

  4.   

    tj_dns(愉快的登山者):我理解是本期初库存,不一定是本月,现在是8月份,但可能系统才到6月份
    从楼主的意思,感觉库存表应该不是即时库存,如果是即时库存的话,上月库存的数量和金额从哪来呀!
      

  5.   

    BEGIN TRAN 
     @dt_Date Datetime --要查询的日期
    AS 
    SET LOCK_TIMEOUT 500
    SELECT KC.名称,KC.型号,KC.单价
           KC.数量+ISNULL(RKB.SYKCSL,0)-ISNULL(CKB.SYKCSL,0) AS 上月库存数量,
           KC.金额+ISNULL(RKB.SYKCJE,0)-ISNULL(CKB.SYKCJE) AS 上月库存金额,
           ISNULL(BRKB.SYKCSL,0) AS 本月入库数量,
           ISNULL(BRKB.SYKCJE,0) AS 本月入库金额,
           ISNULL(BCKB.SYKCSL,0) AS 本月出库数量,
           ISNULL(BCKB.SYKCJE,0) AS 本月出库金额,
           KC.数量+ISNULL(RKB.SYKCSL,0)-ISNULL(CKB.SYKCSL,0)+ISNULL(BRKB.SYKCSL,0) AS 本月库存存数量, 
           KC.金额+ISNULL(RKB.SYKCJE,0)-ISNULL(CKB.SYKCJE)+ISNULL(BCKB.SYKCJE,0) AS 本月库存金额,
           LEFT JOIN (SELECT SUM(ISNULL(数量,0) AS SYKCSL),SUM(ISNULL(金额,0) AS SYKCJE)
                        FROM 入库表
                        WHERE Datediff(month,入库日期,@dt_Date)>0
                        GROUP BY 名称,型号,单价) RKB
             ON KC.名称=RKB.名称 AND KC.型号=RKB.型号
           LEFT JOIN (SELECT SUM(ISNULL(RKB.数量,0) AS SYKCSL),SUM(ISNULL(RKB.金额,0) AS SYKCJE)
                        FROM 出库表
                        WHERE Datediff(month,出库日期,@dt_Date)>0
                        GROUP BY 名称,型号,单价) CKB
             ON KC.名称=CKB.名称 AND KC.型号=CKB.型号       LEFT JOIN (SELECT SUM(ISNULL(数量,0) AS SYKCSL),SUM(ISNULL(金额,0) AS SYKCJE)
                        FROM 入库表
                        WHERE Datediff(month,入库日期,@dt_Date)=0
                        GROUP BY 名称,型号,单价) BRKB
             ON KC.名称=BRKB.名称 AND KC.型号=BRKB.型号
           LEFT JOIN (SELECT SUM(ISNULL(RKB.数量,0) AS SYKCSL),SUM(ISNULL(RKB.金额,0) AS SYKCJE)
                        FROM 出库表
                        WHERE Datediff(month,出库日期,@dt_Date)=0
                        GROUP BY 名称,型号,单价) BCKB
             ON KC.名称=BCKB.名称 AND KC.型号=BCKB.型号
    COMMIT TRAN不用TMP,直接调用存储过程!
      

  6.   

    那你表里的字段数目,比你列出的要多
    insert tmp(名称,型号,单价,上月库存数量,上月库存金额,本月入库数量,本月入库金额,本月出库数量,本月出库金额,本月结存数量,本月结存金额)
    select a.名称,a.型号,a.单价,a.数量 上月库存数量,a.金额 上月库存金额,b.数量 本月入库数量,b.金额 本月入库金额,
    c.数量 本月出库数量,c.金额 本月出库金额,a.数量+b.数量-c.数量,a.金额+b.金额-c.金额
    from 库存表 a
    left join (select 名称,型号,sum(isnull(数量,0)) 数量,sum(isnull(金额,0)) 金额 from 入库表  where year(入库日期)=当前年 and month(入库日期)=当前月 group by 名称,型号) b on a.名称=b.名称 and a.型号=b.型号 
    left join (select 名称,型号,sum(isnull(数量,0)) 数量,sum(isnull(金额,0)) 金额 from 出库表  where year(出库日期)=当前年 and month(出库日期)=当前月 group by 名称,型号) c on a.名称=c.名称 and a.型号=c.型号 
      

  7.   

    我数过了 TMP表就11个字段
      

  8.   

    行了 还有个问题
    我用了个简单的数据 得到了 本月出库数量 本月出库金额 本月结存数量 本月结存金额为NULL 怎要把NULL至为0?
      

  9.   

    这是我写的答案 看看有什么不对的?
    truncate table ttmp
    insert  ttmp(mingcheng,xinhao,danwei,danjia,pnum,pmoney,nrnum,nrmoney,ncnum,ncmoney,nknum,nkmoney)select a.产品名称,a.规格型号,a.单位,a.单价,isnull(a.库存数量+d.上月入库数量-e.上月数量,0) pnum,
    isnull(a.金额+d.上月入库金额-e.上月总金额,0) pmoney,
    isnull(b.入库数量,0) nrnum,
    isnull(b.入库金额,0) nrmoney,
    isnull(c.数量,0) ncnum,
    isnull(c.总金额,0) ncmoney,
    isnull(a.库存数量,0) pnum,
    isnull(a.金额,0) pmoneyfrom t_ck_tmp aleft join (select 产品名称,规格型号,单价,sum(isnull(入库数量,0)) 入库数量,sum(isnull(入库金额,0)) 入库金额 from t_ck_rk  where year(入库日期)=2003 and month(入库日期)=09 group by 产品名称,规格型号,单价) b on a.产品名称=b.产品名称 and a.规格型号=b.规格型号 and a.单价=b.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(入库数量,0)) 上月入库数量,sum(isnull(入库金额,0)) 上月入库金额 from t_ck_rk  where year(入库日期)=2003 and month(入库日期)=08 group by 产品名称,规格型号,单价) d on a.产品名称=b.产品名称 and a.规格型号=b.规格型号 and a.单价=b.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(数量,0)) 数量,sum(isnull(总金额,0)) 总金额 from t_ck_ll  where year(领料日期)=2003 and month(领料日期)=09 group by 产品名称,规格型号,单价) c on a.产品名称=c.产品名称 and a.规格型号=c.规格型号 and a.单价=c.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(数量,0)) 上月数量,sum(isnull(总金额,0)) 上月总金额 from t_ck_ll  where year(领料日期)=2003 and month(领料日期)=08 group by 产品名称,规格型号,单价) e on a.产品名称=c.产品名称 and a.规格型号=c.规格型号 and a.单价=c.单价
      

  10.   

    pnum,pmoney,--上月库存?
    nrnum,nrmoney,--本月入?
    ncnum,ncmoney,--本月出?
    nknum,nkmoney--本月结存?
      

  11.   

    pnum,pmoney,--上月库存?
    nrnum,nrmoney,--本月入?
    ncnum,ncmoney,--本月出?
    nknum,nkmoney--本月结存?
      

  12.   

    --t_ck_tmp应该放的是9月初的库存吧?
    truncate table ttmp
    insert  ttmp(mingcheng,xinhao,danwei,danjia,pnum,pmoney,nrnum,nrmoney,ncnum,ncmoney,nknum,nkmoney)select a.产品名称,a.规格型号,a.单位,a.单价,isnull(a.库存数量+d.上月入库数量-e.上月数量,0) pnum,
    isnull(a.金额+d.上月入库金额-e.上月总金额,0) pmoney,
    isnull(b.入库数量,0) nrnum,
    isnull(b.入库金额,0) nrmoney,
    isnull(c.数量,0) ncnum,
    isnull(c.总金额,0) ncmoney,
    isnull(a.库存数量,0) pnum,--别名不对,应为nknum
    isnull(a.金额,0) pmoney--别名不对,应为nkmoneyfrom t_ck_tmp a
    left join (select 产品名称,规格型号,单价,sum(isnull(入库数量,0)) 入库数量,sum(isnull(入库金额,0)) 入库金额 from t_ck_rk  where year(入库日期)=2003 and month(入库日期)=09 group by 产品名称,规格型号,单价) b on a.产品名称=b.产品名称 and a.规格型号=b.规格型号 and a.单价=b.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(入库数量,0)) 上月入库数量,sum(isnull(入库金额,0)) 上月入库金额 from t_ck_rk  where year(入库日期)=2003 and month(入库日期)=08 group by 产品名称,规格型号,单价) d on a.产品名称=b.产品名称 and a.规格型号=b.规格型号 and a.单价=b.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(数量,0)) 数量,sum(isnull(总金额,0)) 总金额 from t_ck_ll  where year(领料日期)=2003 and month(领料日期)=09 group by 产品名称,规格型号,单价) c on a.产品名称=c.产品名称 and a.规格型号=c.规格型号 and a.单价=c.单价
    left join (select 产品名称,规格型号,单价,sum(isnull(数量,0)) 上月数量,sum(isnull(总金额,0)) 上月总金额 from t_ck_ll  where year(领料日期)=2003 and month(领料日期)=08 group by 产品名称,规格型号,单价) e on a.产品名称=c.产品名称 and a.规格型号=c.规格型号 and a.单价=c.单价