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
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.型号
left join 是社么意思?
从楼主的意思,感觉库存表应该不是即时库存,如果是即时库存的话,上月库存的数量和金额从哪来呀!
@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,直接调用存储过程!
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.型号
我用了个简单的数据 得到了 本月出库数量 本月出库金额 本月结存数量 本月结存金额为NULL 怎要把NULL至为0?
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.单价
nrnum,nrmoney,--本月入?
ncnum,ncmoney,--本月出?
nknum,nkmoney--本月结存?
nrnum,nrmoney,--本月入?
ncnum,ncmoney,--本月出?
nknum,nkmoney--本月结存?
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.单价