如何解决Crystal Reports公式中if then仅返回首个匹配结果的问题
问题原因排查
你当前使用的if-else逻辑本身是符合「匹配对应字段返回对应名称」的需求的,如果调整判断顺序后仍然仅返回首个匹配项,首先排查表关联配置:
- 进入数据库专家的关联设置页,确认
TS_ORDER_ALLOC和CS_BROKER、CS_BROKER_1、CS_BROKER_2三个表的关联方式均为左外连接 - 若使用内连接,只要任意一个关联关系不匹配,整条记录都会被过滤,自然只会返回首个关联匹配的结果
方案1:单匹配返回场景优化
如果仅需返回第一个匹配到的Broker名称,推荐用可读性更高的Select Case写法替换原有if-else结构:
Select {@BrokerFullName} Case {TS_ORDER_ALLOC.EXEC_BROKER} : {CS_BROKER.BKR_NAME} Case {TS_ORDER_ALLOC.STEP_OUT_BROKER} : {CS_BROKER_2.BKR_NAME} Case {TS_ORDER_ALLOC.BKR_OF_CREDIT} : {CS_BROKER_1.BKR_NAME} Default : "" // 可自定义未匹配时的返回值
方案2:多匹配全返回场景实现
如果存在{@BrokerFullName}同时匹配多个Broker字段的情况,需要返回所有匹配的名称,移除else分支直接拼接结果即可:
Local StringVar brokerName := ""; If {@BrokerFullName}={TS_ORDER_ALLOC.EXEC_BROKER} Then brokerName := brokerName + {CS_BROKER.BKR_NAME} + " "; If {@BrokerFullName}={TS_ORDER_ALLOC.STEP_OUT_BROKER} Then brokerName := brokerName + {CS_BROKER_2.BKR_NAME} + " "; If {@BrokerFullName}={TS_ORDER_ALLOC.BKR_OF_CREDIT} Then brokerName := brokerName + {CS_BROKER_1.BKR_NAME} + " "; Trim(brokerName)
内容的提问来源于stack exchange,提问作者TSWDenton
相关产品推荐
相关产品推荐

