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.這個時候我們既想要去重,又想要去重後的數據,我們可以這樣:

1 select t.* from [PeopleCount] as t where t.procedureID='8334' and not exists
2     (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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章