0

我正在尝试验证与某些车辆的行程有关的一些数据。

行程数据的格式为

Vehicle   Trip    Place_Name
      1      1         ATown
      1      2         BTown
      1      3         ATown
      2      1         ATown
      2      2         CTown

此表链接到有关每个地点的信息。不幸的是,一些指定的地方并不是唯一的,即可能有不止一个地方名为ATown。

所以地点数据的形式是

Place_ID   Place_Name  Co-ordinates
       1        ATown     Lat1,Lng1
       2        ATown     Lat2,Lng2
       3        ATown     Lat3,Lng3
       4        BTown     Lat4,Lng4
       5        BTown     Lat5,Lng5
       6        CTown     Lat6,Lng6

所以有三个地方叫Atown,两个地方叫BTown,只有一个地方叫CTown。

如果我加入这两个表

select T.Vehicle , T.Trip , P.Place_ID , P.Place_Name
from Trips as T
left join
Places as P
on T.Place_Name = T.Place_Name

我明白了

T.Vehicle   T.Trip  P.Place_ID  P.Place_Name
      1          1           1         ATown
      1          1           2         ATown
      1          1           3         ATown
      1          2           4         BTown
      1          2           5         BTown
      1          3           1         ATown
      1          3           2         ATown
      1          3           3         ATown
      2          1           1         ATown
      2          1           2         ATown
      2          1           3         ATown
      2          2           6         CTown

我想要得到的是每辆车的一组独特的位置组合

Vehicle Possibility Trip Place_Name Place_ID
      1           1    1      ATown        1
      1           1    2      BTown        4
      1           1    3      ATown        1
      1           2    1      ATown        2
      1           2    2      BTown        4
      1           2    1      ATown        1
      1           3    1      ATown        3
      1           3    2      BTown        4
      1           3    3      ATown        1
      1           4    1      ATown        1
      1           4    2      BTown        5
      1           4    3      ATown        1
      1           5    1      ATown        2
      1           5    2      BTown        5
      1           5    3      ATown        1
      1           6    1      ATown        3
      1           6    2      BTown        5
      1           6    3      ATown        1
      1           7    1      ATown        1
      1           7    2      BTown        4
      1           7    3      ATown        3
      1           8    1      ATown        2
      1           8    2      BTown        4
      1           8    3      ATown        3
      1           9    1      ATown        3
      1           9    2      BTown        4
      1           9    3      ATown        3

车辆 1 应该有 18 条可能的路线,车辆 2 应该有 3 条路线。每辆车的行程次数与同名城镇的数量不同。

一旦我有了地点组合,我就可以使用坐标来绘制每辆车的路线并计算出起点到终点的距离。然后我将使用它来验证其他距离信息。

我正在努力找出从哪里开始构建一个可以产生我需要的结果的 SQL 查询。

任何指针将不胜感激。

4

1 回答 1

0

您的加入是正确的。. . 但是您需要再次加入才能获得第二条腿:

select stop1.Vehicle, stop1.Trip,
       stop1.Place_Name as Place_Name1, stop2.Place_Name as Place_Name2,
       stop1.Place_id as PlaceId1, stop2.Place_id as Palce_Id2
from (select T.Vehicle, T.Trip, P.Place_ID, P.Place_Name
      from Trips as T left join
           Places as P
           on T.Place_Name = T.Place_Name
     ) stop1 join
     (select T.Vehicle, T.Trip, P.Place_ID, P.Place_Name
      from Trips as T left join
           Places as P
           on T.Place_Name = T.Place_Name
     ) stop2
     on stop1.Vehicle = stop2.Vehicle and
        stop1.trip = stop2.trip + 1;

我不确定“可能性”代表什么。如果你想以某种方式枚举这些,那么这取决于数据库。以上是标准 SQL,应该适用于大多数数据库。

于 2013-07-14T15:58:40.997 回答