Обновление с результатом GROUP BY - PullRequest
1 голос
/ 10 ноября 2010

Я знаю достаточно SQL, чтобы написать базовые SELECT и UPDATE s.Я борюсь с JOIN s

Я хочу обновить поле 'county' в таблице преступлений.Я использую таблицу zip_xref, которая даст мне названия округов.Проблема в том, что несколько сотен городов находятся в нескольких округах, и я хочу обновить таблицу с наиболее распространенным округом, поэтому мой подзапрос должен иметь способ ранжировать округа по размеру.

Я имеюнаписал это, чтобы найти названия округов, ранжированных по количеству почтовых индексов в каждом округе.

SELECT DISTINCT CountyName AS counties, COUNT(*) AS numZips  
FROM Zip_XRef WHERE (CityName = 'Aurora') AND (StateName = 'Colorado')  
GROUP BY CountyName ORDER BY numZips DESC

Я знаю, что это ОБНОВЛЕНИЕ не работает, это всего лишь идея.

UPDATE crime_table_08 AS c  
SET county =   
    (SELECT TOP 1 DISTINCT CountyName, COUNT(*) AS numZips 
    FROM Zip_XRef AS z 
    WHERE RTRIM(z.StateName) = RTRIM(c.State) AND RTRIM(z.CityName) = RTRIM(c.city)
    GROUP BY CountyName ORDER BY numZips DESC
    )

Я думаю, что мне нужно будет создать временную таблицу, а затем вызватьэто обновить с, и я не могу полностью разобраться в логике.Любая помощь с благодарностью.

ИЛИ, Кто-нибудь думает, что есть лучший способ?

1 Ответ

1 голос
/ 10 ноября 2010
UPDATE c 
SET county =   t.CountyName
FROM crime_table_08 AS c  
CROSS APPLY (
   SELECT TOP (1) CountyName
   FROM (
       SELECT CountyName, COUNT(*) as cnt
       FROM Zip_XRef AS z 
       WHERE RTRIM(z.StateName) = RTRIM(c.State) AND RTRIM(z.CityName) = RTRIM(c.city)
       GROUP BY CountyName)
   ) AS s
   ORDER BY cnt DESC) as t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...