SQL连接时去掉重复数据

一、关键词 DISTINCT 用于返回唯一不同的值,只可以在select中使用。

1.重复数据完全一样,用distinct

select distinct * from table

根据字段去重用distinct

select distinct 列名称 from 表名称 (对一列进行操作)

select distinct 列名称1,列名称2  from 表名称(对多列进行操作):对多列操作,表示选取 多列都不重复的数据,相当于 多列拼接的记录 的整个一条记录 , 不重复的记录。

注意:(1). DISTINCT 必须放在第一个参数。(2).DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,相当于 把 SELECT 表达式的项 拼接起来选唯一值。

二、sysno列不同,sysno类型为int,自增字段,使用聚合函数max或其他

左连接重复数据表时:先过滤掉有表重复数据

 SELECT * FROM table1 WITH(NOLOCK) A

 LEFT JOIN table2 soEx ON A.SOSysNo=soEx.SOSysNo AND soEx.ExtensionName='IsConfirm'

WHERE soEx.SysNo IN(SELECT MAX(SysNo) FROM  table WHERE SOSysno=A.SOSysNo)

三、使用row_number() over()和partition by给每一组添加行号

row_number() over()分组排序功能:

 在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by  order by 的执行。

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

select * from
(select *, ROW_NUMBER() over (partition by 分组字段(可多个) order by 排序字段) RowNum from 表) AS Result
where RowNum=1

先分组排序,再取出每组的第一条记录进行“去重”

猜你喜欢

转载自www.cnblogs.com/BounceGuo/p/9815927.html