Géographie SQL Latitude / Longitude distance calc

J'ai de la difficulté à utiliser la géographie pour calculer la distance en milles en utilisant le format de ma table.

La latitude et la longitude des deux locations sont côte à côte:

id | A_Latitude | A_Longitude | B_Latitude | B_Longitude 

J'essaie d'get le sharepoint A , avec le sharepoint B , et de returnner la distance entre A et B en miles.

J'ai essayé quelques choses, y compris quelque chose de similaire à:

 DECLARE @orig geography DECLARE @end geography SELECT @orig = geography::Point(A_LATITUDE, A_LONGITUDE, 4326) ,@end = geography::Point(B_LATITUDE, B_LONGITUDE, 4326) FROM table1 SELECT ROUND(@END.STDistance(@ORIG)/1609.344,2) AS MILES ,@END.STDistance(@ORIG) AS METERS ,table1.* FROM table1; 

Où j'obtiens une valeur répétée pour les miles et les mètres sur toutes les lignes. Quelqu'un pourrait-il suggérer comment je devrais structurer cette requête pour get ce que je cherche?

EDIT: Merci SQL Surfer!

 WITH X AS (SELECT geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A ,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B ,ID FROM TABLE1) SELECT ROUND(XBSTDistance(XA)/1609.344,2) AS MILES ,XBSTDistance(XA) AS METERS ,T.* FROM TABLE1 T LEFT JOIN X ON T.ID = X.ID 

Voici ce que je ferais:

 WITH X AS ( SELECT geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A ,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B ,* FROM TABLE1 ) SELECT ROUND(B.STDistance(A)/1609.344, 2) AS MILES ,B.STDistance(XA) AS METERS ,* FROM X 

Si vous envisagez de le faire souvent (et à la volée), pensez à append des colonnes calculées à votre table pour non seulement les types de géographie, mais aussi la distance qui les sépare. À ce stade, c'est juste une simple requête de la table!