1. 程式人生 > >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

 

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