我正在设想您的架构是这样的:
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;
查询中的连接只是正常的“连接回具有我想要的详细信息的地方”。唯一奇怪的事情(如果您可以称其为奇怪的话)是您有两列引用同一个表,因此您必须两次连接回该表(一次用于您想要获取详细信息的每个上下文)。
一旦执行了这些连接,您就可以使用源地理列和目标地理列,因此可以对它们进行任何您想要的地理空间计算。