如何通过匹配assetid在table1新增列返回table2对应lat值
表结构说明
现有两张业务表结构如下:
- table1:字段为
id、assetid,需要新增列存储匹配得到的纬度值 - table2:字段为
id、assetid、lat,为纬度数据源表
需求逻辑:两表通过assetid字段做关联匹配,从table2中提取对应lat值填充到table1新增列中。
原公式错误点
之前编写的=IF((COUNTIF(table2!,)<0),,"")无法生效,核心问题有3个:
- COUNTIF函数缺少必填参数:既没有指定
table2!下的具体统计范围,也没有传入要匹配的assetid条件 - 判断逻辑不成立:COUNTIF返回的是匹配到的条目数,最小值为0,永远不会出现小于0的情况
- 缺少取值逻辑:就算判断条件通过,公式也没有定义返回lat字段对应值的规则,拿不到目标结果
正确实现方法
根据使用的工具场景选对应方案即可:
表格公式类实现(Excel/WPS/在线表格)
新版工具(支持XLOOKUP:Office365/2021、WPS2021及以上版本)
在table1新增列的首行数据单元格输入以下公式,下拉填充整列即可:
=XLOOKUP([@assetid], table2[assetid], table2[lat], "")
逻辑说明:以当前行的assetid为匹配值,在table2的assetid列做精确匹配,匹配成功返回对应行的lat值,匹配不到返回空值,不会显示错误码。
旧版工具(不支持XLOOKUP)
用VLOOKUP加错误捕获实现,首行输入后下拉填充:
=IFERROR(VLOOKUP([@assetid], table2!$A:$C, 3, FALSE), "")
注意点:VLOOKUP要求匹配键(assetid)必须在查询选区的第一列,如果你的table2里assetid不是B列、lat不是C列,要自行调整选区范围和第三个参数(返回值在选区里的列序号),FALSE代表强制精确匹配,不要省略。
SQL语句实现(直接操作数据库表)
如果是在数据库里做表结构更新,直接执行以下SQL,效率远高于逐行公式计算:
-- 先给table1新增lat列,字段类型可根据业务精度调整 ALTER TABLE table1 ADD COLUMN lat DECIMAL(10,6); -- 关联更新填充lat值 UPDATE table1 t1 JOIN table2 t2 ON t1.assetid = t2.assetid SET t1.lat = t2.lat;
上述语句只会更新能匹配到assetid的行,匹配不到的行lat字段会保持空值,符合常规使用需求。
内容的提问来源于stack exchange,提问作者Cathy11
相关产品推荐
相关产品推荐

