我有一个带有邮政编码的字符串(varchar(6)
)(例如1234AB)。
我想计算两个邮政编码之间的距离,但只计算彼此最接近的邮政编码。
所以,我想要一个像这样的更新语句(PSEUDO CODE):
UPDATE TABLE1 SET COL2 WHERE SAME ROW COL1 IS CLOSEST MATCH
COL1 | COL2
1111AA | CLOSEST MATCH FROM COL1 (The closest match for 1111AA in the COL1 column, in this case 1111AB)
1111AB | CLOSEST MATCH FROM COL1
1112AA | CLOSEST MATCH FROM COL1
结果可能是这样的:
COL1 | COL2
1111AA | 1111AB
1111AB | 1111AA
1111BB | 1111AB (or maybe 1111BC)
对我有用的另一件事就是抓住偶数行并将它们转移到COL2
,这样你就可以得到这样的结果:
COL1 | COL2
1111AA| 1111AB
1111BB| 1111BC
所以,我想ORDER BY COL1
然后抓住偶数rownumbers并将它们转移(不复制)到COL2
。
我希望很清楚我想要什么。我无法在互联网上找到我的具体需求,这就是我在这里问的原因。 提前谢谢。
答案 0 :(得分:0)
如果您有计算两个邮政编码距离的功能,请将其称为distance(p1,p2)
。
然后,您可以通过交叉加入所有邮政编码来过滤最近的邮政编码,并对两个邮政编码的每个组合的距离进行排名。
;WITH TEMP AS (
SELECT T1.POSTCODE AS COL1,
T2.POSTCODE AS COL2,
ROW_NUMBER() OVER (PARTITION BY T1.POSTCODE ORDER BY DISTANCE(T1.POSTCODE,T2.POSTCODE)) AS RANK
FROM MYTABLE AS T1
CROSS JOIN MYTABLE AS T2)
SELECT COL1,COL2
FROM TEMP
WHERE RANK=1