scr*_*Owl 2 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
... ...
Run Code Online (Sandbox Code Playgroud)
每个州可以有许多邮政编码,但每个邮政编码应该只有一个州.
我想找到所有错误但似乎无法编写查询来执行此操作.
有什么建议?
jco*_*and 17
只是指出明显的:
由于邮政编码旨在实现高效的邮政投递,因此存在邮政编码跨越州界的不寻常情况,例如跨越多个州的军事设施或最容易从相邻州服务的一个州的偏远地区.例如,邮政编码42223跨越Christian KY和Montgomery TN,邮政编码97635跨越Lake OR和Modoc CA.
请注意您认为的规范数据,并始终相信为您提供真实数据的人.
在这种情况下,0是新泽西州,因此10001对NJ将是错误的,但00001将是准确的NJ,和1是纽约,所以00001将是错误的纽约,但10001会为纽约是准确的.另见http://en.wikipedia.org/wiki/List_of_ZIP_code_prefixes
另外值得注意的是,通过上一个链接中的1000个zip覆盖,您可以准确地确定您所拥有的超出其应该在的范围/状态的邮政编码...
这是一种不同的方法,但不仅仅是给你一个计数,这会给你所涉及的状态.
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;
Run Code Online (Sandbox Code Playgroud)
一旦确定了重复项并将其删除,请添加一个唯一约束,zip,state这样下周,下个月就不会再这样做了.
小智 5
实际上,我每天都在处理全国数据集,并且经常遇到这个问题。邮政编码前缀中的州指示符表示邮局所在的州,不一定是投递区域的范围。我就该国中北部地区的一些问题与美国邮政局的一些高层进行了接触,得知邮政编码计划最初是为了让邮政编码受到州界的限制,但在80年代初期,他们农村地区开始实行例外。有些情况下,北达科他州的一栋房子距离蒙大拿州邮局 10 英里,但该州最近的邮局却位于几个县之外。这就是做出这些例外的原因。这在地面层面上是有意义的,但在数据层面上却没有意义。现在 USPS 数据库中有很多此类例外情况。(我发现)最多产的区域位于 MT/ND 和 SD/ND 边界沿线。