SQL Server找到最接近的匹配字符串并插入新列

时间:2014-10-02 12:18:18

标签: sql sql-server sql-update

我有一个带有邮政编码的字符串(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

我希望很清楚我想要什么。我无法在互联网上找到我的具体需求,这就是我在这里问的原因。 提前谢谢。

1 个答案:

答案 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