欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

对于重复行,怎么只保留重复行中的一行?例如.

更新时间: 2014-05-15 07:47:30 责任编辑: Author_N4

 

对于重复行,如何只保留重复行中的一行?例如....
对于重复行,如何只保留重复行中的一行?例如....

有数据表wzbm有w_name,bm,dw三列,已知w_name有重复的行

想用SELECT distinct w_name,bm,dw FROM wzbm 排除重复行后导入新的表中,用这样的方法来清除重复行中多余的,但不行,用 distinct w_name 可以,但后面再加别的列就不行了。


如何能做到对于w_name有重复的行,只保留一行?
或者筛选出来都是唯一的行后,再导入新表也行 分享到:
--参考方法--

select *
from wzbm t
where not exists (select 1 from wzbm where w_name = t.w_name and bm > t.bm)

--参考方法--
参考下贴中的多种方法

http://blog.csdn.net/acmain_chm/article/details/4126306
[征集]分组取最大N条记录方法征集,及散分....
--参考方法--
Use tempdb
GO
Create table dbo.wzbm
(w_name varchar(10),bm int,dw int )
Go
Insert Into dbo.wzbm values('a',1,2),('a',2,3),('b',2,3)
Go

with tb as 
(
Select *,ROW_NUMBER() Over (Order by w_name) as rn
From dbo.wzbm
)
Select t1.w_name,t1.bm,t1.dw
From tb as t1
Where not exists 
(Select * 
From tb as t2
where t2.rn > t1.rn And t1.w_name = t2.w_name
)

你看这样行不,通过给表添加行号。
--参考方法--
引用:
我发现这样好像就行,不知对不对

SELECT  w_name,bm,dw FROM wzbm 
group by w_name,bm,dw

这跟你上面说的意思不同,这个是求w_name,bm,dw这3列都有重复的行,则只要显示一个

而非 有数据表wzbm有w_name,bm,dw三列,已知w_name有重复的行,但并不表示bm,dw这两列也有相同的值


--参考方法--
  看上去有点复杂
--参考方法--
Use tempdb
GO
Create table dbo.wzbm
(w_name varchar(10),bm int,dw int )
Go
Insert Into dbo.wzbm values('a',1,2),('a',2,3),('b',2,3)
Go
     
with tb as 
(
    Select *,ROW_NUMBER() Over (Order by w_name) as rn
    From dbo.wzbm
)
Select w_name,bm,dw
From tb
where rn in 
(
Select max(rn)
From tb
group by w_name
)

--对 w_name 进行分组,查询出w_name对应的集合中 rn 列最大的行
--参考方法--
delete table where id not in(select w_name, max(ID) from table group by w_name)
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-15 07:47:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/417007/
本文WWW.DOC100.NET DOC100.NET版权所有。