Sql-Server
簡單的 SQL,嵌入式選擇
我有一張帶有緯度/經度的郵政編碼表。不幸的是,它似乎沒有幾個郵政編碼。我想嘗試根據至少在該地區的其他郵政編碼來近似緯度/經度。
因此,對於不在我的數據庫中的郵政編碼 52733,我正在考慮採用“LIKE 5273%”的所有其他郵政編碼的平均緯度。
select ZipCode as z, (select AVG(Latitude) from tlkp_ZipCodes where ZipCode like LEFT(z, 4) + '%' ) from tlkp_ZipCodes
但這似乎不起作用。它說“z”是一個無效的列名。我該怎麼做呢?
您似乎想在標量子查詢的 OUTER 查詢中引用 ZipCode。您不能引用別名
z
,因為它只是在同一個 SELECT 子句中定義的。正確的方法是使用基列,但對錶進行不同的別名,以在列名前加上別名。select a.ZipCode as z, (select AVG(b.Latitude) from tlkp_ZipCodes b where b.ZipCode like LEFT(a.ZipCode, 4) + '%' ) AvgLatitude from tlkp_ZipCodes a
如果您的 DBMS 支持視窗函式,您也可以使用它:
SELECT ZipCode AS z, AVG(Latitude) OVER (PARTITION BY LEFT(ZipCode, 4)) AS AvgLatitude FROM tlkp_ZipCodes AS a ;
在**SQL-Fiddle中測試**