SQLSERVER去除某一列的重復值並顯示所有數據


1.我們要篩選的數據為去除 GX 列的重復項 並將所有數據展示出來,如圖所示:

1 select t.* from [PeopleCount] as t where t.procedureID='8334'

2.這種情況下我們是不可以使用DISTINCT來去重的,我們可以來嘗試一下:

  首先,單純的查詢 GX 這一列用 distinct 是沒有任何問題的

1 select distinct t.GX from [PeopleCount] as t where t.procedureID='8334'

  但是如果我們加上表中其它數據的話,我們來看看效果:

1 select distinct t.GX ,t.* from [PeopleCount] as t where t.procedureID='8334'

  很顯然,結果發現不是我們想要的數據。

3.這個時候我們既想要去重,又想要去重后的數據,我們可以這樣:

  select t.* from [PeopleCount] as t where t.procedureID='8334' and not exists
   (select 1 from [PeopleCount] where procedureID='8334' and GX=t.GX and countID>t.countID)

  這就是將GX過濾去重后查詢到的所有數據了。

備注: ①.EXISTS (sql 返回結果集為真) NOT EXISTS(sql 不返回結果集為真(或返回結果集為假))

       ②.EXISTS表示存在量詞:帶有EXISTS的子查詢不返回任何記錄的數據,只返回邏輯值“True”或“False”

    ③.相關子查詢執行過程:先在外層查詢中取“[PeopleCount]表”的第一行記錄,用該記錄的相關的屬性值(在內層WHERE子句中給定的)處理內層查詢,若外層的WHERE子句返回“TRUE”值,則這條記錄放入結果表中。然后再取下一行記錄;重復上述過程直到外層表的記錄全部遍歷一次為止。

       ④.EXISTS語句不關心子查詢的具體內容,因此用“SELECT *”,“Exists + 子查詢”用來判斷該子查詢是否返回記錄。

       ⑤.Exists:若子查詢的結果集非空時,返回“True”;若子查詢的結果集為空時,返回“False” 。
                NOT EXISTS :若子查詢結果為空,返回“TRUE”值;若子查詢的結果集非空時,返回 “FALSE。

4.對查詢到的結果(DJ列) 如果在不為空的情況下進行求和:

1 select 
2 ISNULL((Select sum(DJ) as CountNum  FROM [PeopleCount] t WHERE type = 1 and t.procedureID='8334' and not exists
3 (select 1 from [PeopleCount] where procedureID='8334' and GX=t.GX and countID>t.countID)),0)  as 求和結果

備注:①.isnull(參數1,參數2),判斷參數1是否為NULL,如果是,返回參數2,否則返回參數1。

        ②.SUM()函數用於計算一組值或表達式的總和,SUM()函數的語法如下:SUM(DISTINCT expression)

 

轉自:https://www.cnblogs.com/guozhaoxin/p/11888591.html


免責聲明!

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



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