以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  条件中有一个字段可能是空值的处理  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=47634)

--  作者:scott518
--  发布时间:2014/3/13 21:15:00
--  条件中有一个字段可能是空值的处理
库存表有    物料编码,工序,库存数量 三个字段
入库单有  物料编码,工序,入库数量 三个字段

入库单保存时通过下面代码更新库存数量。
update 库存表 set 库存数量 = 库存数量 + 入库数量 where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号= “ & e.datarow(" 工序号 ")
但当两个表中的工序号都为空时就不会更新。当然如果写成两条Update语句分别用工序号 is null 或 is not null来写的方式我会,但感觉那样要执行两次,

如果只写一条语句,怎么样才能实现两个表中工序号都为空也让条件成立?谢谢!

--  作者:Bin
--  发布时间:2014/3/14 8:44:00
--  
update 库存表 set 库存数量 = 库存数量 + 入库数量 where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号= “ & e.datarow(" 工序号 ") & " and (select count(*) from {入库单} where 工序号=" & e.datarow(" 工序号 ") & ") > 0"
--  作者:scott518
--  发布时间:2014/3/14 9:26:00
--  
谢谢BIN,但这样只适合工序号不为空的,我是想一条语句当两个表的工序号同时不为空或者同时为空时都适用。
--  作者:Bin
--  发布时间:2014/3/14 9:28:00
--  
工序号等于库存表就说明工序号不为空了啊.再判断入库单也存在 不就是不为空了吗?  这个逻辑找不着吗?
--  作者:scott518
--  发布时间:2014/3/14 9:47:00
--  
主要是当两个表的物料编码都相等,同时两个表的工序号都为空时也让它执行,即在编码相同的情况下两个表工序为空也等于是相等。即同条语句实现,在编码相等时,表个表中的工序相等成立, 工序同时为空也成立。
--  作者:Bin
--  发布时间:2014/3/14 9:49:00
--  
你怎么一时一个样呢? 你到底是想怎么样? 我已经彻底迷糊了.
--  作者:scott518
--  发布时间:2014/3/14 10:05:00
--  
其实从1楼开始就是同一个意思,即想让下面这条语句改写成在两个表的工序同时不为空或者同时为空时都能执行。
update 库存表 set 库存数量 = 库存数量 + 入库数量 where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号= “ & e.datarow(" 工序号 ")

关键就是sql 当条件出现null = null时等于不成立,如何写才能让null = null这种情况相等。

--  作者:Bin
--  发布时间:2014/3/14 10:06:00
--  
那怎么又扯到物料编码去了呢,

你能不能明确说明一下你到底想怎么样呢.

--  作者:scott518
--  发布时间:2014/3/14 10:30:00
--  

如下图:入库时是按物料编码和工序两列来更新库存表中的库存数量的。

如果入库单中的工序为1,则更新库存表中工序为1并且相同物料编码的库存数量,

如果入库单中的工序为空,则更新库存表中工序为空并且相同物料编码的库存数量,

主要是想问这两种情况能否只写在一条语句中实现(即我认为两个工序都为空编码相同时也等于是相等的。)


图片点击可在新窗口打开查看此主题相关图片如下:360截图20140314101417209.jpg
图片点击可在新窗口打开查看

下面这种写法:两个表中的工序号都为空时where条件就不成立了,想要类似这样的正确写法。

update 库存表 set 库存数量 = 库存数量 + 入库数量 where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号= “ & e.datarow(" 工序号 ")

 

谢谢!


--  作者:Bin
--  发布时间:2014/3/14 10:34:00
--  
好纠结,还是无法理解你的意思.

我瞎蒙


update 库存表 set 库存数量 = 库存数量 + 入库数量 where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号= “ & e.datarow(" 工序号 ") & " and (select count(*) from {入库单} where 物料编码 = ‘“ & e.datarow("物料编码") & ”’ and 工序号=" & e.datarow(" 工序号 ") & ") > 0"