SQL 去除重复记录

xhcai810914 2011-01-25 07:55:10
首先查询结果顺序一定要与原有记录顺序保持一致,其次不要产生空行
昨天有部分人给了回帖,但是基本上都改变了记录的顺序,有的还产生了空行
请各位大侠帮忙了
问题1:对于以下几个记录
ID
123456
123123
123456
123456
123789

所有执行完SQL后的结果顺序与原ID顺序相同,另外由于涉及到数十万条记录的操作,要求速度要快
要求结果1:去除重复ID,显示记录结果为
123456
123123
123789
要求结果2:去掉重复ID,显示结果为
123123
123789 (与结果1不同的是将所有123456都去除了,而结果1进行了保存)
要求3:根据阈值的不同,决定是否进行重复过滤,例如阈值设置为2,由于123456的重复个数为3,那么由于3》2
结果为
123123
123789
如果阈值为4,由于3《4
结果为
123456
123123
123456
123456
123789

要求结果4:上面提到的过滤均是整个字段的过滤,如果有如下新的需求,只针对字段的前三位进行过滤,上面字段的前三位均是123,那么过滤结果是这6个字符串都是相同的(因为只取前三位作为比较依据),最终输出结果就是这六个字符串,
而如果选择前四位进行过滤,上面字段中有三个是相同的,1234开头的,最终输出结果就是这三个字符串
...全文
721 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyfhz 2011-01-26
  • 打赏
  • 举报
回复
两个建议:
1. 如果是文本文件里的有序数据,完全可以在录入到DB的时候增加唯一标示字段。
2. 如果使用者连Office的数据操作功能都不了解,那么他(她)对数据库的倒入/导出以及操作的能力很可能也不高,因此LZ恐怕应该考虑做一个小的程序来自动进行这种整理工作,而不是通过一堆零碎的SQL以及数据DML操作来达到目的。
coleling 2011-01-26
  • 打赏
  • 举报
回复
楼主提了一堆要求,却只给40分......
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
你说的这个过程需要文本导入
操作excel
而用这个东西的人电脑上可能是一个完全不懂office的人
另外excel的筛查是针对整个字段
如果想对字段的某些位进行过滤操作
可能还需要编写VBS脚本,比较麻烦
-晴天 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xhcai810914 的回复:]
同意你的一些观点,继续提个问题
我手里的输入是一个TXT文档
结构如下:
SerNum
123456
123789
123654
123456
123456
123123

如何将这个结构生成到excel里(字段类型为文本,不是数值),最后在C++中调用该SQL语句

同时,需要一个反向的过程,就是将数据库中排序好的东西重新输入到文本中
[/Quote]
在EXCEL里有一个数据导入功能,可以直接将文本文件导入到EXCEL中,在导入过程中可以直接设置导入列的数据类型为文本,你可以试试这个功能.
如果可以借用或需要使用SQL来对数据进行先行处理,那也可以先将文本数据导入到MSSQL,处理好之后再导出到EXCEL.不过,个人觉得,一般的排序/筛选功能EXCEL里都具备,可以直接在那里处理,而不必麻烦MSSQL了.
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
谢谢,qianjin036a
之所以有这样的要求,是因为朋友需要的是这样的一个东西
而他给我的输入就是上面提到的一个txt文档
同时要求我处理后保持原有顺序
之前对SQL用的也不多
所以只好请教各位了
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
同意你的一些观点,继续提个问题
我手里的输入是一个TXT文档
结构如下:
SerNum
123456
123789
123654
123456
123456
123123

如何将这个结构生成到excel里(字段类型为文本,不是数值),最后在C++中调用该SQL语句

同时,需要一个反向的过程,就是将数据库中排序好的东西重新输入到文本中
-晴天 2011-01-25
  • 打赏
  • 举报
回复
解释:
1.
对于本身就杂乱无章的一列数据,SQL语句只能以原来存储存储以及处理的先后次序从其中检索所需要的数据,并不能严格地以原先排序为序,因为原先实际"无序".
2.
如果一定要以原先存储排列为序,那应该另作一表,强制性添加一个序,如上面所加的idt.
3.
其实,因原先无序,即使强制生成一序,也是没有意义的,因为,在处理数据时如果谈到顺序,都是要加一个关键字的,如:
以出生年月为序,以好得多笔划为序,以数量为序,以时间为序等等,楼主在学习SQL的时候,最好先在头脑里形成一个"序"的概念,而不要拘泥于原来的数据排列.
我是从VFP转过来的,VFP里讲究一个记录顺序,甚至在每行记录前都加一个"行号",可以针对行号来进行很多处理.转到SQL来以后,开始非常不适应,老是想到原来的行排列.很长时间才逐渐适应没有行号的数据记录处理.楼主可不要步我的后尘.
Shawn 2011-01-25
  • 打赏
  • 举报
回复
#1.首先说顺序问题,一个数据表,不建立排序字段但又有排序要求,是不正确的。
#2.如果要保证顺序,那么效率就是一个问题。可以这样解决:自己加一个排序字段。
#3.期待高手~
叶子 2011-01-25
  • 打赏
  • 举报
回复
如果要排序可以添加个唯一标识。
叶子 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xhcai810914 的回复:]
除此之外,我这里有数十万条记录
效率也是一个问题
[/Quote]
这个表怎么没有个主键,没有唯一标识,没有索引?
-晴天 2011-01-25
  • 打赏
  • 举报
回复
create table tb(ID varchar(6))
insert into tb select '123456'
insert into tb select '123123'
insert into tb select '123456'
insert into tb select '123456'
insert into tb select '123789'
go
set nocount on
--重构基础临时表
select identity(int,1,1)as idt,* into # from tb
select '1.'
select * from # a where not exists(select 1 from # where id=a.id and idt<a.idt)
select '2.'
select * from # a where not exists(select 1 from # where id=a.id and idt<>a.idt)
select '3.1'
select * from # a where not exists(select 1 from # where id=a.id group by id having count(*)>2)
select '3.2'
select * from # a where not exists(select 1 from # where id=a.id group by id having count(*)>4)
select '4.1'
select * from # where left(id,3)='123'
select '4.2'
select * from # where left(id,4)='1234'
go
drop table tb,#
/*
----
1.

idt ID
----------- ------
1 123456
2 123123
5 123789


----
2.

idt ID
----------- ------
2 123123
5 123789


----
3.1

idt ID
----------- ------
2 123123
5 123789


----
3.2

idt ID
----------- ------
1 123456
2 123123
3 123456
4 123456
5 123789


----
4.1

idt ID
----------- ------
1 123456
2 123123
3 123456
4 123456
5 123789


----
4.2

idt ID
----------- ------
1 123456
3 123456
4 123456

*/
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
除此之外,我这里有数十万条记录
效率也是一个问题
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
另外我的这个表只有一个字段
xhcai810914 2011-01-25
  • 打赏
  • 举报
回复
主要是大家的结果基本执行后顺序都变了
我不知道如何控制结果的顺序和原来的顺序保持一致
Shawn 2011-01-25
  • 打赏
  • 举报
回复
其实个人觉得,你可以结贴了。把昨天各位给你的答案好好捉摸一下。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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