如何查处重复的数据,如下表所示

Rubi 2006-06-13 02:46:50
表:A
f3
=======
1598750
1598751
1598752
1598753
1598754
1598755
1598756
1598757
1598758
1598759
1599999
13009090
13009091
13009092
13009093
13009094
13009095
13009096
13009097
13009098
13009099
15999990
19999999
有如上表,目前有两个事情要做:
1:对于
13009090
13009091
13009092
13009093
13009094
13009095
13009096
13009097
13009098
13009099
这样连续的10个8位数据,我可以认为他们就是相当于一个7位的1300909,这个规律大家应该可以看得比较清楚.问题是我表中有很多这样的数据,我如何把它转换变成如下的表数据(只有大于7位,目前暂时定位8位的数据才需要转换为7位数据):
那么上面的表A转换后就变成了
表B
f3
=======
1598750
1598751
1598752
1598753
1598754
1598755
1598756
1598757
1598758
1598759
1599999
1300909
15999990-----因为这里只有一个8位数,无法实现转换
19999999-----同上


2,我要找出表中重复的数据,并去掉该重复数据.
规则就是如果一个8位数据不能转换为7位数据,同时该8位数的前7位和该表中的7位数据中任意数据只要一样,那么我就认为该8位数据在表中重复,那么就删除该8位数据
比如上面的表
1599999和15999990,就相当于1599999这个7位数据转换后,它包含了15999990,所以认为15999990和7位的1599999重复,那么规则就是把这个8位数据给去掉.

那么经历上两个要求,我的最终数据为
f3
=======
1598750
1598751
1598752
1598753
1598754
1598755
1598756
1598757
1598758
1598759
1599999
1300909
19999999--不能转换为7位,又没有重复,就留下
得到全部为标准7位的数据,并且没有重复的
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rubi 2006-06-15
  • 打赏
  • 举报
回复
10w行数据,比较起来好慢阿
Rubi 2006-06-13
  • 打赏
  • 举报
回复
赫赫,谢谢,要是那10个数据不联系,这个方法就不好了
冷箫轻笛 2006-06-13
  • 打赏
  • 举报
回复
--环境
create table a
(
f3 varchar(8)
)

insert into a select '1598750'
insert into a select '1598751'
insert into a select '1598752'
insert into a select '1598753'
insert into a select '1598754'
insert into a select '1598755'
insert into a select '1598756'
insert into a select '1598757'
insert into a select '1598758'
insert into a select '1598759'
insert into a select '1599999'
insert into a select '13009090'
insert into a select '13009091'
insert into a select '13009092'
insert into a select '13009093'
insert into a select '13009094'
insert into a select '13009095'
insert into a select '13009096'
insert into a select '13009097'
insert into a select '13009098'
insert into a select '13009099'
insert into a select '15999990'
insert into a select '19999999'


--语句
select left(f3,7) from a
where len(f3)= 8
group by left(f3,7)
having count(1) = 10
union
select * from a t1
where (select count(1) from a where f3 like left(t1.f3,7)+'%') <> 10
and not exists (select 1 from a where T1.f3 like f3+'%' and f3 <> t1.f3)

--结果
1300909
1598750
1598751
1598752
1598753
1598754
1598755
1598756
1598757
1598758
1598759
1599999
19999999

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧