当前位置: 代码迷 >> Sql Server >> 怎么删除部分字段重复数据,而其他字段留取的数据随机
  详细解决方案

怎么删除部分字段重复数据,而其他字段留取的数据随机

热度:97   发布时间:2016-04-24 09:11:48.0
如何删除部分字段重复数据,而其他字段留取的数据随机
表一        
字段1       字段2       字段3   
A                   B              C
A                   B               D 
X                  Y              E
A                   B              C
A                   B               D 
X                   B              C
X                     Y             D 
X                   Y             E            
删除 字段1 和字段2 重复的数据  字段3的数据留取哪一个都可以  变成如下内容
字段1       字段2       字段3   
A                   B              C
X                  Y              E
------解决思路----------------------
删除之后应该有3行吧
X                   B              C   这行应该保留吧
------解决思路----------------------
DELETE 表1
 WHERE EXISTS (SELECT *
                 FROM 表1 t
                WHERE t.字段1 = 表1.字段1
                  AND t.字段2 = 表1.字段2
                  AND t.字段3 < 表1.字段3)

------解决思路----------------------
create table #表一  
(      
字段1 varchar(10),       字段2 varchar(10),       字段3 varchar(10))  
insert into #表一 values 
('A',                   'B',              'C'),
('A',                   'B',               'D'), 
('X',                  'Y',              'E'),
('A',                   'B',              'C'),
('A',                   'B',               'D'), 
('X',                   'B',              'C'),
('X',                     'Y',             'D'), 
('X',                   'Y',             'E')

with cte as
(
select *,ROW_NUMBER()over(PARTITION by 字段1,字段2,字段3 order by newid()) id from #表一 
)  
delete from cte where id>1     

select * from #表一 
------解决思路----------------------

根据   #2
还差一点
有重复
------解决思路----------------------
根据  #3  的 

;with cte as
(
select *,ROW_NUMBER()over(PARTITION by 字段1,字段2,字段3 order by newid()) id from #表一 
)  
delete from cte where id=1     


上面的 where  id  >1 要改为 等于  1  ,不然删反了
  相关解决方案