2013-07-14 50 views
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條。每個車輛的出行次數因doe而異是同名的城鎮數量。

一旦我有地方組合,我可以使用座標來繪製每輛車的路線,並計算出起點到終點的距離。然後我將使用它來驗證其他距離信息。

我在努力研究從哪裏開始構建一個能夠產生我需要的結果的SQL查詢。

任何指針,將不勝感激。

回答

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,適用於大多數數據庫。