[VIP专享]一个简单的去除重复字段的SQL查询语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个简单的去除重复字段的SQL查询语句
2009-11-16 17:12
一个简单的去除重复字段的SQL查询语句
[2008-11-04 16:01:15 by rainoxu] | 分类:我的知识库
今天公司里让.Net程序修改一个程序,需要去掉输出中的重复楼盘名称,一开始想到的是Distinct,但死路不通,只能改道,最终偶在网上找到了一个思路,修改了一下就有了。
先看所有记录(这是我在测试的数据库里做的):
OK,我们这样来消除重复项:
1.
select * from table1 as a
where not exists(select 1 from table1 where logID=a.LogID and ID>a.ID)
2.
最近做一个数据库的数据导入功能,发现联合主键约束导致不能导入,原因是源表中有重复数据,但是源表中又没有主键,很是麻烦。经过努力终于解决了,现在就来和大家分享一下,有更好的办法的可以相互交流。
有重复数据主要有一下几种情况:
1.存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉
example:select distinct * from table(表名) where (条件)
2.存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id 的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])
3.没有唯一键ID
这种情况我觉得最复杂,目前我只会一种方法,有那位知道其他方法的可以留言,交流一下:
example:
select identity(int1,1) as id,* into newtable(临时表) from table select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])
drop table newtable
关于一个去除重复记录的sql语句
2009-8-24 16:33
提问者:lichuanbao1234|悬赏分:30 |浏览次数:1075次
我要查询一个表中content字段相同的记录的详细信息。其中每条记录都有一个标识符state,0表示未发送,1表示已发送。我要统计所有content相同的记录的信息,包括其中已发送(state=1)的记录。请问大家看看我这样写有什么问题?
select distinct content,name,push_date,total,e.total_sended from
tbl_jingwei_push a,
(select count(*) as total_sended from tbl_jingwei_push where state=1 and content=a.content) e
这样查出的其他字段都是符合要求的,唯独e.total_sended的结果出问题,它显示的是表中所有state=1的记录,请问大家我要怎么改呢?
问题补充:
这个sql语句是不对的。表a是错误的。请大家指点迷津,我要统计content 相同并且state为1的记录数目。谢谢各位。我就是想去掉重复记录并统计一下,只不过如果state=1的话,我要统计一下state=1的记录数。前提是这些记录的content是相同的。
二楼回答的不对,这和我写的是一样的,a表是不能在e表中用的。
2009-8-24 16:57
最佳答案
select distinct content,name,push_date,total,sum(case state when 1 then 1 when 0 then 0 end) as total_sended from tbl_jingwei_push
以上,希望对你有所帮助!
select distinct content,name,push_date,total,e.total_sended from
tbl_jingwei_push a,
(select count(*) as total_sended from tbl_jingwei_push where state=1 and e.content=a.content) e
|评论
2009-8-24 16:54 hrhero|五级
select distinct content,name,push_date,total,e.total_sended from
tbl_jingwei_push a,
(select count(*) as total_sended from tbl_jingwei_push where state=1 and content=a.content group by content ) e
试试这样
SQLServer:Distinct和Group by去除重复字段记录
2010-10-14 11:31:27| 分类:默认分类 | 标签:|字号大中小订阅
重复记录有两个意义,一是完全重复的记录,也即所有字段均重复的记录
二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或
都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集 select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,
实际写时可以写在select子句中省去此列)
其它的数据库可以使用序列,如: