Uma ferramenta para calcular a distância entre duas distâncias postais do Reino Unido e encontrar uma lista de todos os códigos postais dentro de um determinado número de quilômetros.
Clique abaixo para assistir ao vídeo passo a passo:
Para encontrar uma lista de códigos postais em X quilômetros, use a função de tabela postCodesWithinXkm
. Por exemplo, para encontrar todos os códigos postais com 5 quilômetros de SW1A 0AA, você pode usar o código abaixo.
SELECT * FROM postCodesWithinXkm('SW1A 0AA',5)
Para determinar a distância entre dois códigos postais, use a função escalar distanceBetweenPostCodes
. Por exemplo: para encontrar a distância entre SW1A 0AA e SE10 0DX, você pode usar o código abaixo.
SELECT dbo.distanceBetweenPostCodes('SW1A 0AA','SE10 0DX')
Para encontrar uma lista de todos os códigos postais e sua distância até um determinado posto, use a função de tabela distanceToAllPostCodes
SELECT * FROM dbo.distanceToAllPostCodes('SW1A 0AA') a
Suponha que temos um banco de dados CRM contendo uma tabela Prospects
contendo uma lista de endereços de clientes em potencial e uma tabela Branch
contendo todos os endereços de nossas filiais.
postCodesWithinXkm
Se uma determinada agência estiver realizando uma promoção e quisermos notificar todos os clientes potenciais em um raio de 5 km da agência, poderíamos usar o código abaixo para obter uma lista de todos os clientes potenciais que devemos contatar.
SELECT a.ProspectName, a.ProspectEmail, a.PostCode
FROM CRM..Prospects a
INNER JOIN postCodesWithinXkm('PO19 1EL',5) b on a.PostCode = b.PostCode
A saída seria algo como:
Nome do cliente potencial | E-mail do cliente potencial | Código Postal |
---|---|---|
Acme Corp Ltda | [email protected] | PO18 0AE |
Ferramentas4u Ltda | [email protected] | PO20 2GU |
Carnes de Hal | [email protected] | PO19 7EY |
distanceBetweenPostCodes
Poderíamos usar o código abaixo para determinar o número de Prospects num raio de 5 km de cada uma de nossas filiais.
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
A saída seria algo como:
Código postal da filial | Filial | Clientes |
---|---|---|
BN1 2RE | Brighton | 15 |
PO19 1EL | Chicester | 37 |
W4 5TA | Chiswick | 89 |
distanceToAllPostCodes
Suponha que quiséssemos determinar a filial mais próxima de cada cliente potencial. Podemos fazer uso de distanceToAllPostCodes
para determinar a distância de cada filial para cada cliente em potencial e ordenar por armário.
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
A saída seria algo como:
Nome do cliente potencial | Nome da Filial | Distância |
---|---|---|
Acme Corp Ltda | Brighton | 7.477788367078679 |
Acme Corp Ltda | Chicester | 82.13621491096778 |
Acme Corp Ltda | Chiswick | 86.65279491895977 |
PopPostCodes.sql
e edite o local do arquivo 'C:UserstimgasourcereposPostCodeDistanceCalculatorPostCodeDistanceCalculatorFilesukpostcodes.csv'
para apontar para o local correto.PostCodeDistanceCalculator.publish.xml
e selecione a instância de destino e o banco de dados para implantar.Contém dados do Ordnance Survey © Direitos autorais da Crown e direito de banco de dados 2021
Contém dados do Royal Mail © Royal Mail copyright e direito de banco de dados 2021
Fonte: Office for National Statistics licenciado sob a Open Government License v.3.0