SQL Server中怎样可以从SELECT语句的结果集中删除重复行

如题所述

在要删除的有重复数据中存在几种情况:

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 [去除重复的字段名列表,....])

扩展资料:

SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。

Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。

参考资料:百度百科-Microsoft SQL Server管理系统

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-12
使用 DISTINCT 消除重复项
DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。例如,如果在 titleauthor 中选择所有作者 ID 时未使用 DISTINCT,那么将会返回下列行(其中包括一些重复的行):

USE pubs
SELECT au_id
FROM titleauthor
下面是结果集:

au_id
-----------
172-32-1176
213-46-8915
213-46-8915
238-95-7766
267-41-2394
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
899-46-2035
998-72-3567
998-72-3567

(25 row(s) affected)

而使用了 DISTINCT 后,就能够除去重复项,而只查看唯一的作者 ID:

USE pubs
SELECT DISTINCT au_id
FROM titleauthor

下面是结果集:

au_id
-----------
172-32-1176
213-46-8915
238-95-7766
267-41-2394
274-80-9391
409-56-7008
427-17-2319
472-27-2349
486-29-1786
648-92-1872
672-71-3249
712-45-1867
722-51-5454
724-80-9391
756-30-7391
807-91-6654
846-92-7186
899-46-2035
998-72-3567

(19 row(s) affected)

重要 涉及 DISTINCT 的语句的输出取决于列的排序规则或应用 DISTINCT 的表达式。有关不同排序规则的效果的更多信息,请参见 SQL Server 排序规则基础知识。

对于 DISTINCT 关键字来说,各空值将被认为是相互重复的内容。当 SELECT 语句中包括 DISTINCT 时,不论遇到多少个空值,在结果中只返回一个 NULL。本回答被提问者采纳
第2个回答  推荐于2017-10-15

结果集中去除重复行可以使用函数【distinct】也可以使用分组语句【group by】

1、【distinct】使用示例:

select distinct userid,username from 表名

2、分组语句【group by】使用示例:

select userid,username from 表名 group by userid,username


1和2两个语句的select检索输出结果是一致的

第3个回答  2010-07-10
使用 distinct 或者 group by
第4个回答  2010-07-10
给你一个网址好了,呵呵,可以学会更多东西,我也懒得敲了。

参考资料:http://www.360doc.com/content/10/0408/13/536925_22087659.shtml

SQL Server中怎样可以从SELECT语句的结果集中删除重复行
1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉。example: select distinct * from table(表名) where (条件)2.存在部分字段相同的纪录(有主键id即唯一键)如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组 example:select * ...

SQL求助:相同数据剔出
使用 DISTINCT 消除重复项 DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行。如果没有指定 DISTINCT,那么将返回所有行,包括重复的行。例如,如果在 titleauthor 中选择所有作者 ID 时未使用 DISTINCT,那么将会返回下列行(其中包括一些重复的行):USE pubs SELECT au_id FROM titleauthor 下面是...

sql中删除重复数据
select distinct * into #temp from tablename delete tablename go insert tablename select * from #temp Sqlclub go drop table #temp 以上就是SQL Server删除重复行的方法介绍。

sqlserver中union的用法
UNION操作默认会去除重复的记录。如果两个SELECT语句返回的结果中有重复的行,UNION会只保留唯一的行。如果需要包括重复行,可以使用UNION ALL。例如:sql SELECT column_name FROM table1 UNION ALL SELECT column_name FROM table2;使用UNION ALL时,返回的结果集会包含所有的行,包括重复的行。但要注意...

sql server 中如何删除多余重复行,只保留一行, 比如 id 重复相同的多条...
里面有一个distinct,就是消除重复行的,如果你是想看的时候,重复的只留一行,而不是删除里面的数据的话,那么就是写select distinct id from persons或者select id from persons group by id 如果你是想删除表里面的相同行,那么就是delete from persons where id not in(selelct id from persons ...

怎样去除sql server数据库中查询到的重复的记录
关键是在上面sql的where子句中select 重复记录字段 form 数据表 group by 重复记录字段 having count(重复记录字段)>1 修改为 select min(id) form 数据表 group by 重复记录字段 having count(重复记录字段)>1 这样就查询重复记录字段中ID最小值 那么上面的语句就是 select id,* from 数据...

sql server语法保留第一个删除重复
--根据字段id(唯一)删除重复的行,只保留最大id或最小id行,下面示例只保留id最小行DELETE FROM 表名 WHERE(id IN (SELECT a.id FROM 表名 a LEFT OUTER JOIN (SELECT 字段1, 字段2 FROM 表名 GROUP BY 字段1, 字段2 HAVING (COUNT(*) > 1)) AS b ON a.字段1= b.字段1 ...

在SELECT语句中,对查询结果进行排序的子句是什么?能消除重复行的关键字...
1、首先打开SQL Server Management管理工具,运用Select语句查询出要排序的数据,如下图所示。2、接下来我们直接运用Order By对数据中的ContactName字段进行排序,如下图所示,默认是升序。3、如果想按照降序的话,则需要在排序字段后面加上desc属性,如下图所示。4、接下来你也可以在order by后面加上两个...

如何使用sql语句在sqlserver中删除重复数据
(select 1 from (select col1 from t1 group by col1 having count(1)>1) t where t.col1=t1.col1);如果希望对于有重复的记录希望保留其中一条记录而不是全部删除,则可以运行下列语句,前提是数据表必须含有自增id列。delete from t1 where exists (select 1 from (select col1,max(id) ...

sql server 怎么删除表里重复数据
1、必须保证表中有主键或者唯一索引,或者某列数据不能重复。只有这样,才可能使用一句SQL来实现。否则只能考虑其它办法。下面的语句,假定BB列是不重复的,删除后保存BB列值最大的那条记录。delete from 表 where aa in (select aa from 表 group by aa having count(aa)> 1)and bb not in (...

相似回答