iT邦幫忙

0

SQL Server 篩選特定欄位相同就不顯示

請問各位大神:
假設我目前所下語法及結果如下,要如何篩選條件只顯示第二張表格的內容呢(相同的permission就不顯示,只顯示不同的,且僅A有或僅B有都要顯示)
使用資料庫為SQL SERVER,還請協助指點,謝謝

SELECT * FROM test

https://ithelp.ithome.com.tw/upload/images/20190604/20116501B1qnd6vpLL.png
↑圖一
https://ithelp.ithome.com.tw/upload/images/20190604/20116501oIpIYfMhQv.png
↑圖二

1 個回答

3
暐翰
iT邦大師 1 級 ‧ 2019-06-04 12:53:20
最佳解答

只想抓出沒有重複permission可以使用group by permission having count(1) = 1

select max(name) as name,permission
from test
group by permission having count(1) = 1

線上測試連結 | db<>fiddle


想請問having count(1) = 1 括號裡面及等號後方的1代表什麼呢?據我了解括號裡的1是因為欄位名稱permission在第二欄(陣列方式從0起算);等號外的1就比較不太清楚,是只顯示出現1次的值? 方便的話還請您指點,非常感謝!

count函數假如裡面有非null的值一列會+1,所以使用count(1)可以避免null情況,始終+1
舉例,以下表格查詢select count(val) from T結果會是3因為只有三列有值

表格 T 結構 : 
Val
1
null
2
3

等號外的1就比較不太清楚,是只顯示出現1次的值

having是集合條件篩選概念,代表只要集合數量=1的結果

fufujane iT邦新手 5 級 ‧ 2019-06-05 09:00:14 檢舉

非常感謝您的答覆,但是還有一個疑問,max()是什麼概念?為什麼用max()就能夠避免掉"不在group by群組"的錯誤?謝謝

暐翰 iT邦大師 1 級 ‧ 2019-06-05 15:45:56 檢舉

fufujane

為什麼用max()就能夠避免掉"不在group by群組"的錯誤?謝謝
因為只取集合的最大一筆資料,照你的表格邏輯集合數一筆的資料,name也只會有一筆資料所以特別可以這樣使用

fufujane iT邦新手 5 級 ‧ 2019-06-05 16:51:50 檢舉

因為只取集合的最大一筆資料,照你的表格邏輯集合數一筆的資料,name也只會有一筆資料所以特別可以這樣使用

了解,感謝~

我要發表回答

立即登入回答