分区行的独特组合

时间:2013-07-14 15:40:43

标签: sql unique rows combinations

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

行程数据的格式为

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查询。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分: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,适用于大多数数据库。