基于位置数据类型的距离

时间:2013-11-15 12:33:05

标签: sql-server

我有2张表格如下。

Cust_Master:
Cust_ID     Location                                        Distance  WHID
Cust10001   0xE6100000010CA986FD9E58172A40425A63D009685340  ???       ???
Cust10002   0xE6100000010C7BD976DA1A992F4071766B990C835340  ???       ???

WH_Master:
WH_ID   Location
WH1001  0xE6100000010C84F068E388C54240373811FDDA5B5340
WH1002  0xE6100000010C5BB1BFEC9E142A407DEA58A5F4675340

我想根据WH_Master中的位置在Cust_Master表中填充Distance和WHID。有人可以对此有所了解。

2 个答案:

答案 0 :(得分:0)

创建一个临时表,其中包含客户的距离和仓库ID的交叉连接,然后根据您的要求(最近或最远)在此表上执行选择并使用数据填充客户表。您需要定义一个计算距离的函数,然后根据客户ID运行更新。

答案 1 :(得分:0)

使用STDistance()计算距离,然后排名函数应该起作用:

UPDATE Cust_Master 
SET 
    Distance = OuterQuery.Distance, 
    WHID = OuterQuery.WH_ID 
FROM (
    SELECT
        Cust_ID,
        WH_ID,
        Distance,
        RANK() OVER (PARTITION BY WH_ID ORDER BY Distance ASC) AS 'RNK'
    FROM (
        SELECT Cust_ID, WH_ID, Cust_Master.Location.STDistance(WH_Master.Location) AS Distance
        FROM Cust_Master, WH_Master
    ) InnerQuery
    GROUP BY Cust_ID, WH_ID, Distance
) OuterQuery 
WHERE RNK = 1 AND Cust_Master.Cust_ID = OuterQuery.Cust_ID

这会将Cust_Master表格与WH_IDDistance更新为WH_ID中距离WH_Master最近的n。如果您希望RNK = 1最近,则可以将RNK = n更改为{{1}}