2013-07-14 4 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. Количество поездок, совершаемых каждым транспортным средством, варьируется в зависимости от того, s количество городов с тем же именем.

Как только у меня есть комбинации мест, я могу затем использовать координаты для построения маршрутов для каждого транспортного средства и определения расстояния до начала. Затем я буду использовать это для проверки другой информации о расстоянии.

Я изо всех сил пытаюсь понять, с чего начать построение 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 и должен работать для большинства баз данных.

Смежные вопросы