日期:2014-05-18  浏览次数:20526 次

求一sql查重复的语句,我觉得有点难度哈
表有id,name,tel,add,web,email字段

表中ID是自增的,name与有重复的,但是没有完全重复的记录
比如有如下数据:
id           name           tel           add           web                                   email
1             张三           11111       西安         google.com                   zhangsan@gmail.com
2             李四           22222       北京         null                               null
3             王二麻子   11111       上海         baidu.com                     wang@gmail.com
4             张三           33333       广州         null                               zhangsan@gmail.com
5             李四           22222       北京         sohu.com                 lisi@gmail.com                          

6             王二麻子     22222     北京         csdn.net                       wang@gmail.com
..........
28000

现在要找出name相同   但是web长度最大(呵呵,NULL肯定是最小的啦,当然数据有2万条左右哈,web有的有,有的没有,有的2条相同,有的长度不同,但是name是相同的)   的记录,怎么搞啊   不会写

----------------------------------------------
上面只是举了个例子,实际的数据有9万条,重复的是28000条(都是重复2条,我用group   by   name   having   count(name)   筛选出来的,当前是要剔除重复,而且要保留web内容最多的一条记录..    

描述有点复杂,但是要求结果就剔除重复   而且web保留最大的


------解决方案--------------------
try

Select
A.*
From
TableName A
Inner Join
(
Select
name,
Max(Len(web)) As Len_web
From
TableName
Group By name
) B
On A.name = B.name And Len(A.web) = B.Len_web
------解决方案--------------------
declare @t table(id int,name varchar(20),tel varchar(10),addr varchar(50),web varchar(20),email varchar(50))
insert @t select 1, '张三 ', '11111 ', '西安 ', 'google.com ', ' zhangsan@gmail.com '
union all select 2, '李四 ', '22222 ', '北京 ',null,null
union all select 3, '王二麻子 ', '11111 ', '上海 ', ' baidu.com ', 'wang@gmail.com '
union all select 4, '张三 ', '33333 ', '广州 ',null, 'zhangsan@gmail.com '
union all select 5, '李四 ', '22222 ', '北京 ', 'sohu.com ', 'lisi@gmail.com '
union all select 6, '王二麻子 ', '22222 ', '北京 ', ' csdn.net ', 'wang@gmail.com '

select * from @t a where id=(select top 1 id from @t where name=a.name order by len(web) desc)
--结果
id name tel addr