Сравнение расстояния между широтой и долготой между двумя столбцами с использованием T-SQL - PullRequest
0 голосов
/ 19 октября 2018

Привет, ребята. Я пытаюсь сравнить расстояние между клиентом и соответствующим сервером, используя данные географии в MSSQL.

Я могу успешно сравнить расстояние между двумя точками.Однако отображается расстояние только для последней записи.

Вот запрос, который я использую:

Declare @locations1 GEOGRAPHY;
Declare @locations2 GEOGRAPHY;
Declare @ServerID int;

SELECT @locations1 = GeoLoc from [TestDb].[dbo].[Locations] where IsClient =1;
SELECT @ServerID = ServerID from [TestDb].dbo.Locations where IsClient=1; 
SELECT @locations2 = GeoLoc from [TestDb].[dbo].[Locations] where IsClient =0 AND id=@ServerID ;

select @locations1.STDistance(@locations2)/1000 As [Distance in KM]

Я считаю, что приведенный выше запрос работает следующим образом:

location1 - имеет географическое расположение тех столбцов, где IsClient равен True.
ServerId - имеет ServerID столбцов, в которых IsClient равен True.
location2 - имеет географическое расположение столбца, где IsClient равен 0, а идентификатор сервера, полученный в приведенном выше запросе, совпадает с идентификатором компьютера.

Таким образом,
местоположения1 должны иметь географическое расположение клиентов.
местоположения2 должны иметь географическое расположение соответствующих серверов.

Мой дизайн таблицы:

enter image description here

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

Как получить расстояние всех записей?Нужна помощь:).Спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

выглядит так, как будто вам нужно выполнить самообъединение, для чего вам всегда нужно «псевдонимить» имена таблиц.что-то вроде

SELECT l1.id,l2.id,l1.serverid, l1.geoloc.STDistance(l2.geoloc)/1000.0 As [Distance in KM] FROM
       [TestDb].[dbo].[Locations] l1 JOIN
       [TestDb].[dbo].[Locations] l2
            ON L1.IsClient = 1 AND L2.isClient = 0 AND L2.id = L1.ServerId

, так что для каждого клиента будет присоединяться к его записи сервера, как определено l1.ServerId

  • l1 - таблица LEFT, а l2 - это таблица LEFT.правильный стол.

l1 и l2 - это псевдонимы вашей единой таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...