我有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。有人可以对此有所了解。
答案 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_ID
和Distance
更新为WH_ID
中距离WH_Master
最近的n
。如果您希望RNK = 1
最近,则可以将RNK = n
更改为{{1}}