sql在将其他列插入新表时使用distinct
我的表中基本上有很多重复字段,下面的代码可以帮助解决这个问题sql在将其他列插入新表时使用distinct,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的表中基本上有很多重复字段,下面的代码可以帮助解决这个问题 select distinct city,state into dbo.zips from zipcodes a基本上会查看zipcodes中具有重复的城市、州的所有行,并在将它们插入新表dbo.zips时使它们唯一。我的问题是如何插入表zipcodes中的所有其他字段,以便它也可以进入新的dbo.zips表。我只想要一个独特的城市,一个我已经可以做到的州,但也要把我试图做到的所有其他领域都带过去 select * distin
select distinct city,state into dbo.zips from zipcodes
a基本上会查看zipcodes中具有重复的城市、州的所有行,并在将它们插入新表dbo.zips时使它们唯一。我的问题是如何插入表zipcodes中的所有其他字段,以便它也可以进入新的dbo.zips表。我只想要一个独特的城市,一个我已经可以做到的州,但也要把我试图做到的所有其他领域都带过去
select * distinct city,state into dbo.zips from zipcodes
但它不起作用如何将连接返回到同一个表上:
select distinct z.city, z.state, z1.field1, z1.field2 ... z1.fieldn
into dbo.zips
from zipcodes z
inner join zipcodes z1 on z1.city=z.city and z1.state=z.state
但是如果城市、州是重复的,那么其他列中的哪一列
它们不能重复
许多城市有不止一个邮政编码。
我不明白为什么你只想在一个表名zips中输入一个城市的邮政编码
select city, state, min(zip)
from zipcodes
group by city, state
我会使用
行号()来执行此操作:
如果不希望在最终表中使用seqnum,请显式列出所需的列。可以使用CTE(公共表表达式)完成此操作。调用生成的表zips
,如果它只包含其中的一部分,似乎非常危险。类似于citystates
的名称似乎更合适。您需要对未复制(与城市和州一起)但仍希望在结果集中显示的列进行假设,例如最小值、最大值、平均值。你能在zipcodes中发布所有列以及你想要在zips中发布哪些列吗?这不会删除重复项,但会大大增加行数,特别是对于像纽约这样有数百个邮政编码的城市。这取决于他想从表中提取的字段。“distinct”关键字仍然存在,因此将只返回唯一的行。如果他从联接表中提取zipcode,那么它将返回许多行。
select zc.* into dbo.zips
from (select zc.*,
row_number() over (partition by city, state order by (select null)) as seqnum
from zipcodes
) zc
where seqnum = 1;