У меня есть следующее заявление sql - оно пытается найти все почтовые индексы, которые пересекают наши велосипедные дорожки: -
UPDATE a
SET a.ZipCodeId = d.ZipCodeId
FROM [dbo].[BikePaths] a
INNER JOIN [dbo].[BikePathBoundaries] b ON b.ZipCodeId = c.ZipCodeId
INNER JOIN [dbo].[ZipCodeBoundaries] c ON b.Boundary.STIntersects(c.Boundary) = 1
Что хорошо ... если велосипедная дорожка не пересекает два или более почтовых индекса (что часто случается). Итак, я хочу сказать, Get the zipcode which this bikepath MOSTLY intersects
(у меня есть другой список в другом месте для всех bikpath к почтовым индексам).
Если бы это было SELECT
заявление, оно бы выглядело примерно так ...
SELECT a.BikePathId, a.BikePathName, c.ZipCodeId, d.ZipCode,
c.Boundary.STIntersection(d.Boundary).STArea() AS Area,
ROW_NUMBER() OVER (PARTITION BY a.BikePathId ORDER BY c.Boundary.STIntersection(d.Boundary).STArea() DESC) AS RowNumber
FROM [dbo].[BikePaths] a
INNER JOIN [dbo].[BikePathBoundaries] b on a.BikePathId = b.BikePathId
INNER JOIN [dbo].[ZipCodeBoundaries] c on b.Boundary.STIntersects(c.Boundary) = 1
INNER JOIN [dbo].[ZipCodes] d on c.ZipCodeId = d.ZipCodeId
, а затем я могу просто добавить TOP 1
WHERE RowNumber = 1
, чтобы убедиться, что я получаю по одной строке на BikePath ... с почтовым индексом, по которому этот велосипедный путь в основном содержится в / пересекается.
Я знаю, что 2-е утверждение Sql выглядит неопрятно, с добавлением этого геопространственного материала ... но может ли кто-нибудь помочь мне включить это в UPDATE
заявление?