我有一个关于SQL Server的问题。
表格:emp
empid | name |sal
1 | abc |100
2 | def |200
3 | test |300
2 | har |500
3 | jai |600
4 | kali |240
根据上面的表格,这张表格有重复数据,我想从 emp
表中删除重复数据。
并且要将重复数据加载到 empduplicate
表中。
这里 empid
是唯一的。如果 empid
出现了多次,则该记录被视为重复。
empduplicate
的结构如下:
Empid | name | sal
在删除重复数据后,我希望看到emp
表中的数据如下所示:
empid | name | sal
1 | abc | 100
4 | kali | 240
为了删除重复项,我尝试了这段代码:
;with duplicate as
(
select
*,
row_number()over (partition by empid order by empid) as rn
from emp
)
delete from duplicate
where rn > 1
但我无法删除整个记录。
例如:empid=2
存在重复数据。
empid|name |sal
2 |def |200
2 |har |500
我需要删除empid=2
对应的所有记录。因为empid=2
有重复,所以需要从emp
表中删除它。
并且empduplicate
表需要加载重复数据,看起来像这样:
empid | name |sal
2 |def |200
2 |har |500
3 |test |300
3 |jai |600
对于插入重复数据,我尝试了以下代码:
insert into empduplicate
select
id, name, sal
from
emp
group by
id
having
count(*) > 1
执行该查询时会出现错误:
'duplicate.name'列无效,因为它既没有包含在聚合函数中也没有包含在GROUP BY子句中。
请告诉我如何编写SQL Server查询以实现我的任务。