Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql在将其他列插入新表时使用distinct_Sql_Sql Server_Tsql - Fatal编程技术网

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;