我有表表code_Commune包含该城市的一般gpscode_Commune:
Code_commune Nom_commune coordonnees_gps
01263 MONTMERLE SUR SAONE 46.0849573236,4.7608579486
现在我需要和table lead
进行通信,以添加code_commune和Nom_comune:
表引导
Id_lead latitude Longitude
F439130C 46.00000000 6.39522000
24A09223 46.00000000 6.39522000
42899ABF 46.00000000 4.75212800
有没有办法把这两张桌子对应起来?
您可以使用某种距离测量来查找最近的城市。首先,修复您的第一张表:
alter table code_commune
add latitude as (convert(decimal(14,10),
left(coordonnees_gps, charindex(',', coordonnees_gps) - 1)
)
);
alter table code_commune
add longitude as (convert(decimal(14,10),
stuff(coordonnees_gps, 1, charindex(',', coordonnees_gps), '')
)
);
一旦确定了距离度量,就可以使用apply
。以下使用曼哈顿距离:
select l.*, cc.code_comune
from leads l outer apply
(select top (1) cc.*
from code_commune cc
order by abs(cc.latitude - l.latitude) + abs(cc.longitude - l.longitude)
);
这是非常低效的。如果您需要效率,那么您应该研究SQL Server对空间数据的支持。