一个简单的去除重复字段的SQL查询语句

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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子句中省去此列)

其它的数据库可以使用序列,如:

相关文档
最新文档