Tenho uma tabela de CEPs com latitudes/longitudes. Infelizmente, não parece ter alguns códigos postais. Gostaria de tentar aproximar a latitude/longitude com base em outros CEPs que estejam pelo menos na região.
Portanto, para o código postal 52733, que não está no meu banco de dados, pensei em obter as latitudes médias de todos os outros códigos postais que são "LIKE 5273%".
select ZipCode as z,
(select AVG(Latitude)
from tlkp_ZipCodes
where ZipCode like LEFT(z, 4) + '%' )
from tlkp_ZipCodes
Isso não parece funcionar embora. Diz que "z" é um nome de coluna inválido. Como eu faço isso?
Parece que você gostaria de fazer referência a ZipCode na consulta OUTER da subconsulta escalar. Você não pode fazer referência ao alias
z
, pois ele acabou de ser definido na mesma cláusula SELECT. A maneira correta de fazer isso é apenas usar a coluna base, mas criar um alias diferente para a tabela para prefixar os nomes das colunas com os aliases.Você também pode usar isso, se o seu DBMS suportar funções de janela:
Teste no SQL-Fiddle