[SQL ] 有條件順序的case when寫法已刪文

看板Database (資料庫)作者 (nein)時間5年前 (2019/11/04 11:10), 5年前編輯推噓2(205)
留言7則, 3人參與, 5年前最新討論串1/1
資料庫名稱:SQL 資料庫版本:11 內容/問題描述: 各位板友好 我有一個Case When的順序問題,想請教大家 現在我有一個通話紀錄的TABLE,裡面會用到3個欄位 1.撥出時間 2.撥出號碼 3.撥出結果 其中, 1.撥出結果有很多的代號,總共分為3類 有十幾種代號,會被歸類為有效電話,有十幾種代號,會被歸類為無效電話 有一個代號,會被歸類為無人接聽 2.若只有電話號碼,沒有撥出時間也沒有撥出結果,表示尚未撥打 一個電話號碼,可能會被撥打0~N次,若顯示為無效電話,就不會再繼續撥打了 但若為有效電話,則會繼續撥打,撥打的結果也有可能是有效或無人接聽 例如 case 1 2019/10/1 0912345678 無人接聽 2019/10/1 0912345678 無人接聽 2019/10/1 0912345678 有效電話的代碼 2019/10/1 0912345678 無人接聽 case 2 2019/10/1 0987654321 無人接聽 2019/10/1 0987654321 無人接聽 2019/10/1 0987654321 無效電話的代碼 case 3 2019/10/1 0988888888 無人接聽 2019/10/1 0988888888 無人接聽 我想要有一個欄位來判斷, 若同一支號碼,只有撥打結果有過"有效",不管之後又打了多少通無人接聽,都算有效 若同一支號碼,只有撥打結果有過"無效",就算無效 若同一支號碼,全部的撥打結果只有無人接聽,才顯示為無人接聽 若同一支號碼,從未撥打過,則顯示尚未撥打 我現在用case when來寫 我只能寫 case when 撥出結果 in(oo,ox,xx,xu) then '有效' case when 撥出結果 in(yy,ymy,yz,zz) then '無效' end 不能再加case when 撥出結果 in(kk) then '無人接聽' 一加這一欄,很多應該是有效的電話,就會被歸類到無人接聽 請問,這樣的情況 我該怎麼寫呢? 先謝謝各位板友,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 165.225.116.133 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1572837037.A.7D9.html ※ 編輯: giveadamn (165.225.116.133 美國), 11/04/2019 11:10:59

11/04 13:06, 5年前 , 1F
case when 撥出號碼 in (select distinct 撥出號碼
11/04 13:06, 1F

11/04 13:07, 5年前 , 2F
from TABLE where 撥出結果 in(有效代碼)) then '有效'
11/04 13:07, 2F

11/04 13:08, 5年前 , 3F
判斷無效寫法一樣
11/04 13:08, 3F

11/04 13:09, 5年前 , 4F
建議只判斷有效 無效 尚未撥打 然後 else 無人接聽
11/04 13:09, 4F

11/04 13:24, 5年前 , 5F
先分類 無效0 有效1 無人2 未撥打3 然後group by電話號碼
11/04 13:24, 5F

11/04 13:24, 5年前 , 6F
取max(分類) min(分類) 去判斷就好了
11/04 13:24, 6F

11/04 15:27, 5年前 , 7F
做出來了,謝謝樓上的二位板友,非常感謝
11/04 15:27, 7F
文章代碼(AID): #1TlvQjVP (Database)
文章代碼(AID): #1TlvQjVP (Database)