Поиск города по почтовому коду

Опубликовано Mar 15, 2012 в Язык SQL | 10 коммент.

,

Поиск города по почтовому коду

Предположим, что территория страны поделена на части, и каждой из этих частей присвоен уникальный почтовый код (Zip Code). В стране имеются города большие, маленькие и совсем крошечные. Каждый город располагается на местности таким образом, что может покрывать несколько территорий с разными почтовыми кодами. Выглядит это, как показано на рисунке.

Соответствие городов и почтовых кодов описано таблицей со столбцами ZipCode и CityName, которая тоже приведена на рисунке. Нужно написать для этой таблицы SQL запрос с параметром, который соответствует почтовому коду. Результатом этого запроса должно быть название города, который покрывает наибольшее количество территорий с различными почтовыми кодами, в перечень которых попадает территория с заданным значением кода. Если описанному условию соответствует несколько городов – то из них выбирается один случайным образом. Примеры ввода и соответствующего вывода также имеются на рисунке.

Дополнение условия

Решение задачи в исходной постановке предложено. Теперь можно попробовать написать запрос, который параметра, соответствующего ZIP-коду содержать не будет, а выполнит указанную задачу ДЛЯ ВСЕХ значений ZIP-кодов, то есть в результате выдаст целиком таблицу, приведенную на рисунке справа внизу.

Скрипт создания исходных данных

CREATE TABLE [dbo].[ZipCityForPost](
	[Zip] [nvarchar](10) NOT NULL,
	[City] [nvarchar](10) NOT NULL,
 CONSTRAINT [PK_ZipCity] PRIMARY KEY CLUSTERED
(
	[Zip] ASC,
	[City] ASC
)WITH (PAD_INDEX  = OFF,
STATISTICS_NORECOMPUTE  = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS  = ON,
ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip1',  N'City1')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip1 ', N'City2')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip1 ', N'City3')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip2 ', N'City1')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip3 ', N'City3')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip4 ', N'City3')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip5 ', N'City3')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip5 ', N'City4')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip6 ', N'City3')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip6 ', N'City4')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip7 ', N'City4')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip7 ', N'City5')
INSERT [dbo].[ZipCityForPost] ([Zip], [City])
VALUES (N'Zip7 ', N'City6')

 


Автор публикации: