2017-08-29 37 views
-1

我知道这是一个很常见的问题,它一直的answere,并要求对stackoverlow吨的时候,我有一个相同的situtation但小钳位发现在SQL Server表中重复记录

我想使用group by子句得到重复,如果他们存在进行更新,如果他们不只是做一个插入

SELECT  name,age,sex, COUNT(1) as CNT 
FROM  CUSTOMER 
GROUP BY name,age,sex; 

也有一个被称为datecreated领域持有currenttimestamp,它是每个记录不同,即使对于复制品

如何创建一个查询,这将将推迟这一点,如果上述所有具有cnt大于1,只是做一个update和别人做一个insert

+1

提示:尝试使用'MERGE' – Eric

+0

更新刀片= ['merge'](https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact- SQL)。如果count = 1,为什么要插入?你不希望cnt> 0做更新,并且= 0做插入? – xQbert

+0

有没有ID字段?像客户ID一样,每个客户都是独一无二的?你插入什么?更新会是什么? – scsimon

回答

0

尝试是这样的寻找重复。 如果rn> 1意味着它是重复的,则更新else插入。

Select name,age,sex from 
(SELECT name,age,sex, row_number() over (partition by name,age,sex order by name) rn 
FROM CUSTOMER) as a 
Where a.rn > 1  ---- for finding duplicate records 

编辑

随着你的要求是不同的检查它是否是工作或没有。

IF EXISTS (SELECT * FROM CUSTOMER WHERE name = 'your_value1' and age ='your_value2' and sex = 'your_value3') 
UPDATE CUSTOMER set name = 'your_value1',age ='your_value2',sex = 'your_value3' 
where name = 'your_value1' 
and age ='your_value2' 
and sex = 'your_value3' 
ELSE 
insert into CUSTOMER(name,age,sex) VALUES ('Your_value1','your_value2','your_value3') 
+0

您能否提供一个完整的代码示例,如果它包装else条件,那么做这个 –

+0

使用这个查询里面是否存在然后更新else插入 – Anagha

+0

请详细说明,我很新 –