报表编写器中用IIF与IsNull()检测字段为空失败,APTran关联检测求助
首先得帮你梳理下问题的核心:你原本想判断APTran是否关联了APAdjust行,一开始尝试检测APAdjust.AdjdRefNbr是否为空,但没生效,后来发现是误用了字段,换成APTran.CuryTransAmt后,之前的逻辑(或是HB提供的方案)就正常工作了。
咱们来拆解下你最初可能遗漏的点:
误用了判断字段:
APAdjust.AdjdRefNbr并不是判断APTran与APAdjust关联关系的合适字段。即使APTran存在关联的APAdjust行,这个字段也可能不为空;反过来,如果没有关联行,报表编写器里的左连接可能让这个字段返回空,但如果你的关联逻辑没设置对(比如用了内连接),那根本查不到无关联的APTran记录,自然空值判断无效。关联逻辑的设置问题:如果在报表编写器中
APTran和APAdjust的连接类型选错了(比如用了内连接而不是左连接),那么只有存在关联APAdjust行的APTran才会出现在结果集中,你根本没法检测到“无关联”的情况,空值判断也就失去了意义。
结合你后来的发现,换成APTran.CuryTransAmt后逻辑生效,大概率是因为当APTran存在关联的APAdjust行时,这个金额字段会发生变化(比如调整后金额为0),此时用IsNull()或IIF判断就能准确区分状态。举个例子,正确的表达式可能是这样的:
IIF(IsNull(APTran.CuryTransAmt) OR APTran.CuryTransAmt = 0, '已关联调整', '未关联调整')
另外,如果你想更直接地判断是否存在关联的APAdjust行,推荐用Exists子查询(如果报表编写器支持的话),这种方式逻辑更清晰,也不容易受字段值变化的影响:
IIF(Exists(SELECT 1 FROM APAdjust WHERE APAdjust.AdjdDocType = APTran.DocType AND APAdjust.AdjdRefNbr = APTran.RefNbr), '有关联调整记录', '无关联调整记录')
内容的提问来源于stack exchange,提问作者EricP.

