2016-03-25 1 views
3

жаль вышеприведенного названия, я не совсем уверен в том, как слово, но здесь суть ...SQL Server - ввод блока кода в виде таблицы просмотра/временного

Я нашел этот запрос, ниже которого будет рассчитать мили между 2 точками по долготе и широте ...

DECLARE @sourceLatitude FLOAT = 53.0150594250908; 
DECLARE @sourceLongitude FLOAT = -2.24460456782419; 
DECLARE @destinationLatitude FLOAT = 52.002933355733400; 
DECLARE @destinationLongitude FLOAT = -0.976678285584733; 
DECLARE @Location FLOAT 
SET @Location = SQRT(POWER(69.1 * (@destinationLatitude - @sourceLatitude), 
2) + POWER(69.1 * (@sourceLongitude 
- @destinationLongitude) 
* COS(@destinationLatitude/57.3), 2)) 
PRINT @Location 

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

TableAddress 
Address   Long     Lat 
Address 1 52.5600450207834  -0.274050229426521 
Address 2 53.5746997938162  -0.62449270669287 
Address 3 50.3404675259117  -5.15208822743251 

и я TableDestination, который содержит список направлений:

TableDestination 
Address   Long     Lat 
Destination 1 52.5063420216939 -2.07973524437415 
Destination 2 50.9776014579626 -1.35438374178925 
Destination 3 53.5493068199536 -0.679623916124968 
  1. пользователь будет выбрать AddressDestination через параметр
  2. Основываясь на этом результате, я хочу создать представление, в котором будет отображаться, как далеко каждый из адресов отправляется из пункта назначения, используя вышеуказанный запрос.

Im not usre, с чего начать, чтобы кто-то мог указать мне в правильном направлении, как я мог это достичь?

Thankyou очень

пример результата:

theView 
    AddressName   DestinationName   Distance 
    Address 1    Destination 1    38 
    Address 2    Destination 1    49 
    Address 3    Destination 1    16 
+2

Вы не можете объявлять переменные в VIEW. Вы можете в TVF. –

+0

благодарю за информацию, я не уверен, что я смогу добиться этого, действительно прочитав ее обратно себе, я думаю, что мне нужно будет сделать что-то другое вместо – Crezzer7

ответ

1

использование табличных значений функции: Вот пример:

CREATE FUNCTION <function_name> (@prameter1,@parameter2) 

RETURNS TABLE 

AS 

    RETURN 

    (SELECT fiedd1, 
      field2 

     FROM <table name> 
     where field like @prameter1 
     ); 

ТОГДА ЗВОНИТЕ IT:

SELECT * FROM <function_name> (@prameter1,@parameter2) 

для конкретной потребности:

CREATE FUNCTION find_location (@sourceLatitude FLOAT,@sourceLongitude FLOAT,@destinationLatitude FLOAT,@destinationLongitude FLOAT) 

RETURNS TABLE 

AS 

    RETURN 

    (select SQRT(POWER(69.1 * (@destinationLatitude - @sourceLatitude), 
2) + POWER(69.1 * (@sourceLongitude 
- @destinationLongitude) 
* COS(@destinationLatitude/57.3), 2)) as location 
     ); 


GO 

окончательно:

SELECT * FROM dbo.find_location (53.0150594250908, -2.24460456782419,52.002933355733400,-0.976678285584733) 
+1

ОК спасибо, попробуем это – Crezzer7

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