现在小弟在开发ERP模块中进销存的金额检验存储过程时遇到一点问题,请高手指教!
下表只例出进销存表中的部分字段,省去公司代号、库位代号、入库单价等字段!
物料编号 单位 单据编号 单据类别 出入标志 入库数 出库数
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单(反审核) 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS OIN-06-0001 其他入库单 增 956 0
71111 PCS CIN-06-0001 来料验收入库 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060141 其他出库单 减 0 240
71111 PCS OU060142 其他出库单 减 0 90此进销存表根据不同的单据共有655333条出入库记录!
我现在想要做的是:
当单据被反审核后,就相当于其数据冲红不显示!然后删除其中的记录!
我测试查询这些需要冲红的记录时,发现并不正确,请高手指教!
select A.WareHId,A.Itemid,A.inQty,A.outQty,B.inQty,B.outQty,A.Billid,A.Iostyle,A.comm from inviolog A inner join inviolog B on
A.corpcode=B.corpcode and A.warehid=B.WareHid and A.Itemid=B.Itemid
and charindex(A.iostyle,B.iostyle)>0 and a.inqty=b.Outqty and A.billid=B.Billid and ((A.ioflag='增' and B.ioflag='减') or (A.ioflag='减' and B.ioflag='增'))以上SQL用到的:
WareHID=库位代号,iostyle=单据类别,Billid=单据编号,COMM=备注信息请高手帮我!
下表只例出进销存表中的部分字段,省去公司代号、库位代号、入库单价等字段!
物料编号 单位 单据编号 单据类别 出入标志 入库数 出库数
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单(反审核) 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS OIN-06-0001 其他入库单 增 956 0
71111 PCS CIN-06-0001 来料验收入库 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060141 其他出库单 减 0 240
71111 PCS OU060142 其他出库单 减 0 90此进销存表根据不同的单据共有655333条出入库记录!
我现在想要做的是:
当单据被反审核后,就相当于其数据冲红不显示!然后删除其中的记录!
我测试查询这些需要冲红的记录时,发现并不正确,请高手指教!
select A.WareHId,A.Itemid,A.inQty,A.outQty,B.inQty,B.outQty,A.Billid,A.Iostyle,A.comm from inviolog A inner join inviolog B on
A.corpcode=B.corpcode and A.warehid=B.WareHid and A.Itemid=B.Itemid
and charindex(A.iostyle,B.iostyle)>0 and a.inqty=b.Outqty and A.billid=B.Billid and ((A.ioflag='增' and B.ioflag='减') or (A.ioflag='减' and B.ioflag='增'))以上SQL用到的:
WareHID=库位代号,iostyle=单据类别,Billid=单据编号,COMM=备注信息请高手帮我!
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS CIN-06-0001 来料验收入库(反审核) 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单(反审核) 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS OIN-06-0001 其他入库单 增 956 0
71111 PCS CIN-06-0001 来料验收入库(反审核) 减 0 11472
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060141 其他出库单 减 0 240
71111 PCS OU060142 其他出库单 减 0 90___________________________________________________________________________________
物料编号 单位 单据编号 单据类别 出入标志 入库数 出库数
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS OIN-06-0001 其他入库单 增 956 0
71111 PCS OU060141 其他出库单 减 0 240
71111 PCS OU060142 其他出库单 减 0 90
________________________________________________________________________________
_________________________________________________________________________________
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS CIN-06-0001 来料验收入库(反审核) 减 0 11472
_________________________________________________________________________________
71111 PCS OU060012 其他出库单 减 0 11472
71111 PCS OU060012 其他出库单(反审核) 增 11472 0
_________________________________________________________________________________
71111 PCS CIN-06-0001 来料验收入库 增 11472 0
71111 PCS CIN-06-0001 来料验收入库(反审核) 减 0 11472
_________________________________________________________________________________
其单据编号相同并且其入库数等于其出库数时,该单据自动被冲红,不在核算的范围当中!
我的意思就是查出真正需要核算的数据!
因为你没有主键只能这样查:
select distinct A.WareHId,A.Itemid,A.inQty,A.outQty,B.inQty,B.outQty,A.Billid,A.Iostyle,A.comm from inviolog A inner join inviolog B on
A.corpcode=B.corpcode and A.warehid=B.WareHid and A.Itemid=B.Itemid
and charindex(A.iostyle,B.iostyle)>0 and a.inqty=b.Outqty and A.billid=B.Billid and ((A.ioflag='增' and B.ioflag='减') or (A.ioflag='减' and B.ioflag='增'))
这样查出来的应该是需要冲红的记录.
如果有主键就好办了.
FROM table1 a
WHERE NOT EXISTS
(SELECT 1
FROM table1 b
WHERE b.单据编号=a.单据编号
AND b.单据类别=
CASE a.单据类别
WHEN '来料验收入库' THEN '来料验收入库(反审核)'
WHEN '其他出库单' THEN '其他出库单(反审核)'
END
AND b.出入标志=
CASE a.出入标志
WHEN '增' THEN '减'
WHEN '减' THEN '增'
END
AND b.入库数=a.出库数
AND b.出库数=a.入库数)
create table [dbo].[InvIOLog](
[CORPCODE] nvarchar (10) NOT NULL ,
[WarehID] nvarchar(20) not null,
[ITEMID] nvarchar(20) not null,
[ITEMNAMEC] nvarchar(100) null,
[UNIT] nvarchar(10) NULL,
[BillID] nvarchar(100) not null,
[IOSTYLE] nvarchar(20) not null,
[IOFLAG] nvarchar(4) not null,
[IOTIME] DATETIME not null,
[INQTY] decimal(10,2) not null default(0),
[OUTQTY] decimal(10,2) not null default(0),
[PRICE] decimal(14,6) default(0),
[UnitCost] decimal(14,6) default(0),
[STOCK] decimal(10,2) not null default(0),
[Comm] nvarchar(100) null,
[Principal] nvarchar(20) null
)
数据库设计是不能够随便改的!
我现在需要从出入库记录中计算出期初数,期末数,期初金额、期末金额等这些东西来!
Price、UnitCost分别代表含税单价、移动加权平均单价。
非常感谢你,我现在在我的SQL上加上distinct关键字,已经能够找出需要冲红的记录来了!
bugchen888(臭虫)
谢谢你!但是由于关系到多公司、多库位管理,所以在你提供的SQL语句的连接条件中必须加上公司代号、库位代号的连接条件!……
我会在明天下午来结贴,希望更多的朋友提出优化的方案出来,谢谢!