根据下面的表 1,我尝试编写一个查询,允许我创建一个新表,用基于城市、国家和地区的最接近匹配项填充空的 companyID。
表 1 是示例表,而表 2 是预期输出。
表一
Cust | City | Country | Region | CompanyID
ABC | KL | MY | APAC | 123456
ABC | KL | MY | APAC |
ABC | JB | MY | APAC |
ABC | SY | AU | APAC | 778899
ABC | ME | AU | APAC |
GHI | DB | AE | EMEA | 112233
GHI | AD | AE | EMEA |
表2
Cust | City | Country | Region | CompanyID
ABC | KL | MY | APAC | 123456
ABC | KL | MY | APAC | 123456
ABC | JB | MY | APAC | 123456
ABC | SY | AU | APAC | 778899
ABC | ME | AU | APAC | 778899
GHI | DB | AE | EMEA | 112233
GHI | AD | AE | EMEA | 112233
感觉有点像 VLOOKUP,但不确定如何开始。将真诚地感谢任何帮助。
谢谢!
最佳答案
在子查询中。或使用 with 创建所有默认值的内联 View 。然后外连接到那些默认值。
我首先创建了一个名为 usr_test_table 的表,它具有与上述相同的数据。请注意,我的数据库是 oracle,所以不要被“from dual”混淆。那是oracle中的一个特殊的表,一列一行。
select t1.cust, t1.city, t1.country, t1.region,
case
when t1.companyid is not null then t1.companyid
else (
select max(companyid)
from usr_test_table t2
where t2.country = t1.country
)
end companyid
from usr_test_table t1
它比之前关于外连接到内联 View 的评论稍微简单一些。由于现在数据库允许在 select 子句中使用子查询,因此这种情况更容易处理。
关于mysql - 查询以根据其他列获取最接近的匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55392880/