查询以基于其他列获取最接近的匹配值

时间:2019-03-28 08:16:13

标签: mysql sql

基于下面的表1,我试图编写一个查询,使我可以创建一个新表,并根据城市,国家和地区填写最匹配的空公司ID。

表1是样本表,而表2是预期输出。

表1

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的东西,但不确定如何启动。请衷心感谢您的帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

在子查询中。或与所有默认值的创建内联视图一起使用。然后外部联接到那些默认值。

我首先创建了一个名为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

它比之前关于外部连接到内联视图的注释要简单一些。由于现在数据库允许在select子句中使用子查询,因此这种情况更易于处理。