【发布时间】:2015-12-23 03:03:21
【问题描述】:
我有一个关于 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 中的任务
【问题讨论】:
标签: sql-server sql-server-2008