3

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

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

每个州可以有多个邮政编码,但每个邮政编码应该只有一个州。

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

有什么建议么?

4

4 回答 4

19

只是指出显而易见的:

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

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

小心你认为的规范数据,并始终相信为你提供真实数据的人。


在这种情况下,0 代表 NJ,因此10001代表 NJ 是错误的,但00001代表 NJ 是准确的,而 1 代表代表 NY,因此代表 NY00001是错误的,但10001代表 NY 是准确的。另请参阅http://en.wikipedia.org/wiki/List_of_ZIP_code_prefixes

另外值得注意的是,使用上一个链接中的 1000 个邮政编码,您可以准确地确定您拥有的邮政编码超出了它们应该处于的范围/状态......

于 2012-09-17T00:37:31.437 回答
8

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

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这样您就不会在下周、下个月等再次执行此操作。

于 2012-09-16T22:15:25.927 回答
3

实际上,我每天都在使用全国性的数据集,并且经常遇到这个问题。邮政编码前缀中的州代号表示邮局所在的州,不一定是投递区域的范围。我与 USPS 的一些高层就该国中北部的一些问题进行了联系,并被告知邮政编码计划最初旨在使邮政编码受到州界的限制,但在 80 年代初期,他们开始在农村破例。在某些情况下,北达科他州的一所房子距离蒙大拿州邮局 10 英里,但他们所在州最近的邮局位于几个县之外。这就是为什么会出现这些例外。这在地面层面是有意义的,但在数据层面却没有意义。现在 USPS 数据库中有很多这样的例外情况。最多产的地区(我发现的)沿着 MT/ND 和 SD/ND 边界。

于 2015-12-15T18:49:44.693 回答
1

这应该给你你需要的东西:

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

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

于 2012-09-16T21:53:23.203 回答