我有一个包含 3 列的表格,看起来像这样......
tblTowns
TownFrom TownTo Distance
Abington Abington 0
Abington Acton 4
Abington Acushnet 30
Abington Adams 27
Abington Agawam 57
......
Acton Abington 3
Acton Acton 0
所以表格看起来像这样 - 它按字母顺序获取每个城镇,然后对于 TO 中的城镇获取所有剩余的城镇并显示 2 之间的距离。在为 ABINGTON 记录所有城镇之后 - 然后进入下一个城镇- ACTON(如 ..... 后所示)。问题是创建表格的人犯了一些错误,例如
Abington Acton 4
但是当城镇颠倒时......
Acton Abington 3
所以值是不同的,但它们应该是相同的。因为我有很多记录,因为我按字母顺序穿过每个城镇并显示所有其他城镇之间的距离,所以我想看看是否有办法查询数据,它会显示距离不同但 FROM 和 TO 的城镇或者 TO 和 FROM 是一样的.......
期望的结果....
TownFrom TownTo Distance
Abington Acton 4
Acton Abington 3
我不知道我是否在正确的轨道上,但基本上我的查询看起来像这样......
SELECT t1.*
FROM tblTowns AS t1
JOIN tblTownsAS t2
ON t1.TownFrom = t2.townTo and
t1.Distance<> t2.Distance
编辑:有没有什么方法可以让我按记录排序/分组,这样如果 Abington 和 Acton 以及不正确的记录,它们就会彼此相邻。 (如 DESIRED RESULTS 中所示)在这种情况下,我有几千条记录,除非我搜索每条记录,否则无法查看距离是否正确,因为它们目前在 TOWN FROM 中按字母顺序排列。
最佳答案
除了一个条件 t1.townTo = t2.TownFrom
外,您几乎就在那里。
要获得所需的顺序,即在连续的行中看到一对,请在 order by
中使用 case
表达式,以便结果集按最少的顺序排序townfrom 和 townto 首先,然后由最大的 townfrom,townto。
SELECT t1.*
FROM tblTowns AS t1
JOIN tblTowns AS t2 ON t1.TownFrom = t2.townTo and t1.townTo = t2.TownFrom
WHERE t1.Distance <> t2.Distance
order by case when t1.townfrom < t1.townto then t1.townfrom else t1.townto end
,case when t1.townfrom > t1.townto then t1.townfrom else t1.townto end
关于sql - 查询大量记录以找到 1 个字段不同但另外 2 个字段匹配的模式(即使颠倒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571249/