查找与多个州相关联的邮政编码

时间:2012-09-16 21:40:24

标签: sql sql-server sql-server-2008-r2

我有一个包含5位邮政编码(即10001)和匹配州缩写(即NJ,NY,CA)的数据库。我发现有些邮政编码有多种状态(即10001 = NJ和10001 = NY),这是错误的。

   zip         State
 10001          NY
 10001          NJ
 10001          NY
 10001          NY
  ...           ...

每个州都有许多邮政编码,但每个邮政编码只能有一个州。

我想找到所有错误,但似乎无法编写查询来执行此操作。

有什么建议吗?

4 个答案:

答案 0 :(得分:17)

只是指出显而易见的事实:

  

由于邮政编码旨在实现高效的邮政投递,因此有一些不寻常的情况,即邮政编码跨越州界,例如跨越多个州的军事设施或最容易从邻近州服务的一个州的偏远地区。例如,邮政编码42223横跨Christian KY和Montgomery TN,邮政编码97635横跨Lake OR和Modoc CA。

     

http://en.wikipedia.org/wiki/ZIP_code

请注意您认为的规范数据,并始终信任为您提供真实数据的人。


在这种情况下,0代表NJ,因此NJ的10001是错误的,但{J}对于NJ是准确的,而1代表NY,所以00001将是纽约错了,但00001对纽约来说是准确的。另请参阅http://en.wikipedia.org/wiki/List_of_ZIP_code_prefixes

另外值得注意的是,通过上一个链接中的1000个zip覆盖,您可以准确地确定您所拥有的超出其应该在的范围/状态的邮政编码...

答案 1 :(得分:7)

一种不同的方法,但不仅仅是给你一个计数,这会给你所涉及的状态。

SELECT zip, state 
FROM dbo.table AS t
WHERE EXISTS 
(
  SELECT 1 FROM dbo.table 
  WHERE zip = t.zip AND state <> t.state
)
GROUP BY zip, state
ORDER BY zip, state;

一旦您确定了重复项并将其删除,请在zip,state添加一个唯一约束,这样您就不会在下周,下个月再次这样做。

答案 2 :(得分:2)

我实际上每天都在使用全国范围的数据集,并且经常遇到这个问题。邮政编码前缀中的State指示符表示邮局所在的状态,而不一定是交付区域的范围。我曾与USPS的一些高层人士就该国中北部地区的一些问题进行过接触,并被告知邮政编码计划原本打算将邮政编码限制在国家边界,但在80年代初他们在农村地区开始例外。有些情况下,北达科他州的房子距离蒙大拿州邮局10英里,但最近的邮局位于他们自己的州,位于几个县之外。这就是为什么要做出这些例外。它在地面上有意义,但在数据层面却没有意义。现在USPS数据库中有很多这些例外。最多产的区域(我发现)沿着MT / ND和SD / ND边界。

答案 3 :(得分:1)

这应该可以满足您的需求:

select zip,count(distinct state)
from TheTable
 group by zip
 having count(distinct state)>1

这将为您提供表格中存在多个州的每个邮政编码的列表。