Инструмент для расчета расстояния между двумя почтовыми индексами Великобритании и поиска списка всех почтовых индексов в пределах определенного количества километров.
Нажмите ниже, чтобы посмотреть видеопрохождение:
Чтобы найти список почтовых индексов в пределах X километров, используйте табличную функцию postCodesWithinXkm
. Например, чтобы найти все почтовые индексы с 5 километрами SW1A 0AA, вы можете использовать приведенный ниже код.
SELECT * FROM postCodesWithinXkm('SW1A 0AA',5)
Чтобы определить расстояние между двумя почтовыми индексами, используйте скалярную функцию distanceBetweenPostCodes
. Например: чтобы найти расстояние между SW1A 0AA и SE10 0DX, вы можете использовать приведенный ниже код.
SELECT dbo.distanceBetweenPostCodes('SW1A 0AA','SE10 0DX')
Чтобы найти список всех почтовых индексов и их расстояние до определенного сообщения, используйте табличную функцию distanceToAllPostCodes
SELECT * FROM dbo.distanceToAllPostCodes('SW1A 0AA') a
Предположим, у нас есть база данных CRM, содержащая таблицу Prospects
, содержащую список адресов потенциальных клиентов, и таблицу Branch
содержащую все адреса наших филиалов.
postCodesWithinXkm
Если в конкретном филиале проводится акция и мы хотим уведомить всех потенциальных клиентов в радиусе 5 км от филиала, мы могли бы использовать приведенный ниже код, чтобы получить список всех потенциальных клиентов, с которыми нам следует связаться.
SELECT a.ProspectName, a.ProspectEmail, a.PostCode
FROM CRM..Prospects a
INNER JOIN postCodesWithinXkm('PO19 1EL',5) b on a.PostCode = b.PostCode
На выходе должно быть что-то вроде:
ИмяПроспекта | Потенциальный клиентЭлектронная почта | Почтовый индекс |
---|---|---|
Акме Корп Лтд. | [email protected] | ПО18 0АЕ |
ООО «Инструмент4у» | Нед@tools4u.com | ПО20 2ГУ |
мясо Хэла | [email protected] | ПО19 7ЕИ |
distanceBetweenPostCodes
Мы могли бы использовать приведенный ниже код, чтобы определить количество потенциальных клиентов в радиусе 5 км от каждого из наших филиалов.
SELECT a.PostCode As BranchPostcode, a.BranchName, count(b.Id) As CustomerCount
FROM CRM..Branches a
INNER JOIN CRM..Prospects b
ON PostCodeDistanceCalculator.dbo.distanceBetweenPostCodes(a.PostCode,b.PostCode)<5
GROUP BY a.PostCode
На выходе должно быть что-то вроде:
Почтовый индекс филиала | Ветвь | Клиенты |
---|---|---|
БН1 2РЭ | Брайтон | 15 |
ПО19 1ЭЛ | Чичестер | 37 |
W4 5TA | Чизвик | 89 |
distanceToAllPostCodes
Предположим, мы хотим определить ближайший филиал для каждого потенциального клиента. Мы можем использовать distanceToAllPostCodes
, чтобы определить расстояние каждого филиала до каждого потенциального клиента и упорядочить его по шкафу.
SELECT a.ProspectName, c.BranchName, b.distance,
ROW_NUMBER() OVER (PARTITION BY a.ProspectName ORDER BY b.distance ) As DistanceRank
FROM CRM..Prospects a
CROSS APPLY PostCodeDistanceCalculator.dbo.distanceToAllPostCodes(a.PostCode) b
INNER JOIN CRM..Branches c on b.Postcode = c.Postcode
На выходе должно быть что-то вроде:
ИмяПроспекта | Имя ветки | Расстояние |
---|---|---|
Акме Корп Лтд. | Брайтон | 7.477788367078679 |
Акме Корп Лтд. | Чичестер | 82.13621491096778 |
Акме Корп Лтд. | Чизвик | 86.65279491895977 |
PopPostCodes.sql
и отредактируйте местоположение файла 'C:UserstimgasourcereposPostCodeDistanceCalculatorPostCodeDistanceCalculatorFilesukpostcodes.csv'
чтобы указать правильное местоположение.PostCodeDistanceCalculator.publish.xml
и выберите целевой экземпляр и базу данных для развертывания.Содержит данные обследования боеприпасов © Авторские права Короны и право на базу данных, 2021 г.
Содержит данные Royal Mail © Авторские права Royal Mail и права на базу данных, 2021 г.
Источник: Управление национальной статистики, лицензированное по лицензии Open Government v.3.0.