zoukankan      html  css  js  c++  java
  • SQL基础(四)-- 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

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

  • 相关阅读:
    从内存中加载并启动一个exe
    使用Hamcrest增强JUnit的测试能力
    Delphi编译指令说明
    Delphi 64与32位的差异
    获取exe文件窗口抓图,将memo转化为JPG输出
    Delphi 的 Utf-8 转换
    我的第一个破解软件,试验成功!
    Qt之QComboBox(基本应用、代理设置)
    常见寄存器以及常见汇编指令,常见爆破指令 good
    大神级回答exists与in的区别
  • 原文地址:https://www.cnblogs.com/BounceGuo/p/9815927.html
Copyright © 2011-2022 走看看