Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 删除同一表中的重复字段_Sql_Sql Server_Select_Duplicates_Sql Delete - Fatal编程技术网

Sql 删除同一表中的重复字段

Sql 删除同一表中的重复字段,sql,sql-server,select,duplicates,sql-delete,Sql,Sql Server,Select,Duplicates,Sql Delete,我编写此查询是为了显示从外部源自动填充的表中的一组名称: select MAX(UN_ID) as [ID] , MAX(UN_Name) from UnavailableNames group by (UN_Name) 我有很多重复的名字,所以我使用了“分组依据” 我想在执行此select查询后立即删除所有重复项。。 (删除字段UN_名称两次可用的位置,保留一次) 有什么方法可以做到这一点吗?像这样的方法应该可以: WITH CTE AS ( SELECT rn = ROW_NU

我编写此查询是为了显示从外部源自动填充的表中的一组名称:

select MAX(UN_ID) as [ID] , MAX(UN_Name) from UnavailableNames group by (UN_Name) 
我有很多重复的名字,所以我使用了“分组依据”

我想在执行此select查询后立即删除所有重复项。。 (删除字段UN_名称两次可用的位置,保留一次)


有什么方法可以做到这一点吗?

像这样的方法应该可以:

WITH CTE AS 
(
    SELECT rn = ROW_NUMBER() 
                OVER( 
                  PARTITION BY UN_Name
                  ORDER BY UN_ID ASC), * 
    FROM dbo.UnavailableNames
) 
DELETE FROM cte 
WHERE  rn > 1 
基本上,在共享相同“un_名称”的每个组中,分配一个递增的“行号”


然后,您只需删除“row number”大于1的所有行,并保留所有最先出现的行。

类似的操作应该可以:

WITH CTE AS 
(
    SELECT rn = ROW_NUMBER() 
                OVER( 
                  PARTITION BY UN_Name
                  ORDER BY UN_ID ASC), * 
    FROM dbo.UnavailableNames
) 
DELETE FROM cte 
WHERE  rn > 1 
With CTE As
(
Select uid,ROW_NUMBER() OVER( PARTITION BY uname order by uid) as rownum
From yourTable

)

Delete 
From yourTable
where uid in (select uid from CTE where rownum> 1 )
基本上,在共享相同“un_名称”的每个组中,分配一个递增的“行号”


然后,您只需删除“row number”大于1的所有行,并保留所有最先出现的行。

可能是的,呵呵,重复的可能是的,呵呵,重复的
With CTE As
(
Select uid,ROW_NUMBER() OVER( PARTITION BY uname order by uid) as rownum
From yourTable

)

Delete 
From yourTable
where uid in (select uid from CTE where rownum> 1 )