SQLSERVER去除某一列的重複值並顯示所有資料

2022-05-18 23:16:42 字數 2396 閱讀 2485

進入正題,準備我們的測試資料

1.我們要篩選的資料為去除 gx 列的重複項 並將所有資料展示出來,如圖所示:

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

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

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

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

3.這個時候我們既想要去重,又想要去重後的資料,我們可以這樣:

這就是將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)

到此結束,感謝各位~

**:

C DataTable 某一列求和

c datatable 某一列求和 1.列為數字型別double total convert.todouble datatable.compute sum 需要求和的引數 2.列為string 型別 先轉為數字型別 再求和 遇到是採用了這個方法 會報錯,加using system.linq 命名空間...

MySQL 某一列累加

形如這樣的 利用變數 sumsalary sumsalary salary,進行累加,但是別忘記初始化變數 select sumsalary 0 來個例項,某客網的mysql題目 60 按照salary的累計和running total,其中running total為前n個當前 to date 9...

mysql update更新某一列為另一列

update sys user set new field old field 將同乙個表中兩個型別一樣的字段的值互換 update t user u1,t user u2 set u1.signed time u2.create time,u2.create time u1.signed time...