首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-06-19 
对于重复行,如何只保留重复行中的一行?例如....对于重复行,如何只保留重复行中的一行?例如....有数据表wzb

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

有数据表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)

热点排行