Я предполагаю, что ваша схема выглядит примерно так:
create table dbo.station_information (
station_id int not null
constraint PK_station_information primary key clustered (station_id),
location geography not null
);
create table dbo.bike_rides (
bike_ride_id int not NULL
constraint PK_bike_rides primary key clustered (bike_ride_id),
from_station_id INT
constraint [FK_bike_rides_origin]
foreign key (from_station_id)
references dbo.station_information (station_id),
to_station_id INT
constraint [FK_bike_rides_destination]
foreign key (to_station_id)
references dbo.station_information (station_id)
);
Если это так, следующий запрос должен концептуально перебить вас:
select br.bike_ride_id,
origin.[location].STDistance(destination.[location])
from dbo.bike_rides as br
join dbo.station_information as origin
on br.from_station_id = origin.station_id
join dbo.station_information as destination
on br.to_station_id = destination.station_id;
Объединения в запросепросто нормально "присоединиться к месту, где есть детали, которые я хочу".Единственная странная вещь (если вы можете назвать ее странной) состоит в том, что у вас есть два столбца, которые ссылаются на одну и ту же таблицу, поэтому вам нужно присоединиться к этой таблице дважды (по одному разу для каждого контекста, в котором вы хотите получить детали).
После того, как эти объединения выполнены, вам доступны столбцы географии происхождения и назначения, и вы можете выполнять любые геопространственные вычисления, которые вам нужны.