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

 

先分組排序,再取出每組的第一條記錄進行“去重”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM