状态有好几种:如在外面,已返回、未出发等, 用姓名和状态中的一种(已返回)做唯一性校验,公式如何设置? 我用了EXIST()函数,但两个条件不会设置,请赐教
我用了AND(NE(状态,"已返回"),EXIST(姓名)),就是已返回的人能再次提交,否则只能提交一次。但是这个公式不能实现我的要求,所有状态的人都不能再次提交了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
为了实现您的需求,即通过姓名和特定状态(如“已返回”)来唯一性校验,确保每个姓名仅能有一次“已返回”的状态记录,您可以调整EXISTS函数的使用方式。根据您的描述,您希望避免已经标记为“已返回”的人员再次提交“已返回”的状态。这里提供一个调整后的逻辑示例:
正确的逻辑应当是检查数据库中是否已经存在该姓名且状态为“已返回”的记录。如果存在这样的记录,则不允许再次提交“已返回”。这可以通过子查询实现,而不是直接在EXIST函数中使用AND条件。下面是一个可能的SQL表达式结构,用于实现这一逻辑检查:
SELECT
姓名,
状态
FROM
你的表名 AS t1
WHERE
状态 = '已返回'
AND EXISTS (
SELECT 1
FROM 你的表名 AS t2
WHERE t2.姓名 = t1.姓名
AND t2.状态 = '已返回'
AND t2.主键ID <> t1.主键ID -- 确保不是自己和自己比较
);
这段SQL的目的是找出所有尝试标记为“已返回”的记录,但这些记录的姓名已经在其他行中有了“已返回”的状态。这里假设主键ID
是每条记录的唯一标识符,用于排除自我比较的情况。
然而,从您的问题来看,似乎您是在设置某种数据验证规则或公式,而非直接编写SQL查询。如果是这种情况,具体的实现方式会依赖于您所使用的具体系统或平台(如Excel、数据库触发器、应用程序逻辑等)。基于通用逻辑,您需要构建一个检查机制,在提交新状态前,先查询数据库中是否已有该姓名对应的“已返回”记录。如果存在,则拒绝此次提交。
如果您是在Excel环境中进行数据验证,可以考虑使用VBA宏或者更复杂的数组公式来实现类似逻辑,但这超出了直接回答范围,且未在提供的参考资料中提及具体操作方法。对于非SQL环境下的实现,请参照上述逻辑自定义适合您应用场景的验证规则。