iT邦幫忙

2

【SQL】排除重複資料的值的運用

  • 分享至 

  • xImage

各位大大好,想詢問大家一個SQL查詢語法的應用~

我想在pp資料表中,查詢裡面的function_code(功能碼),reverse_reason(沖轉原因),reason_code(原因碼)欄位有多少組合,並且"只要"顯示這個組合最近一筆的policy_no(保單號碼),tran_date(交易日期),agent_code(業務員ID)就好

我先使用這個語法查詢pp資料表中的內容
select distinct function_code,
reverse_reason,
reason_code,
policy_no,
agent_code,
tran_date
into ##123
from pp

第一段語法查詢出的結果
https://ithelp.ithome.com.tw/upload/images/20230810/201620352SxsTEO82D.png

然後想再針對此查詢結果的"function_code","reverse_reason","reason_code"欄位組合排除重覆的值,並顯示最近一筆tran_date的資料,如果tran_date當天有多筆資料則以最小的agent_code來顯示就好。
預期示意圖如下
https://ithelp.ithome.com.tw/upload/images/20230811/201620357QFubVsrFs.png

rogeryao iT邦超人 8 級 ‧ 2023-08-10 19:39:17 檢舉
1.圖二是圖一的完整結果嗎 ?
2.function_code = F1 , tran_date = 108/03/07 有 3 筆 , agent_code = Q12 < T12 , 為何消失 ?
3.function_code =CC 完全無資料?
yamm6205 iT邦新手 5 級 ‧ 2023-08-11 08:34:41 檢舉
rogeryao大大好,
不好意思是我放錯照片了...
照片沒存檔好,已經更新了
2. function_code = F1, tran_date = 108/03/07 資料有 3 筆,但reverse_reason資料都不同,所以資料要保存。
3. 放錯資料了,sorry!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
rogeryao
iT邦超人 8 級 ‧ 2023-08-11 08:47:45
最佳解答
CREATE TABLE pp (
function_code NVARCHAR(50),
reverse_reason NVARCHAR(50) NULL,
reason_code NVARCHAR(50) NULL,
policy_no NVARCHAR(50) NULL,
agent_code NVARCHAR(50) NULL,
tran_date NVARCHAR(50) NULL);

INSERT INTO pp (function_code,reverse_reason,reason_code,policy_no,agent_code,tran_date) VALUES
('CA','','UR','*****','X22****875','102/11/01'),
('CA','2','UR','*****','R12****296','112/04/01'),
('CA','','UR','*****','B22****899','106/12/01'),
('CA','','UR','*****','B12****650','102/11/01'),
('CA','','UR','*****','Q22****296','106/12/01'),
('CA','','UR','*****','L12****081','106/12/01'),
('CA','','UG','*****','S22****735','103/10/01'),
('CA','','UG','*****','N22****610','106/12/01'),
('CA','','T4','*****','Q22****171','102/09/01'),
('CC','','T4','TW0*****','F22****895','109/12/31'),
('CC','','T4','TW0*****','B12****269','111/08/31'),
('CC','','T4','TW0*****','H22****456','108/09/30'),
('CC','','T4','TW0*****','L12****267','108/12/31'),
('F1','','20','160*****9897','T12****600','108/03/07'),
('F1','2','20','176*****2974','Q12****583','108/03/07'),
('F1','3','20','171*****0666','T12****286','108/03/07'),
('F1','','10','178*****3835','T22****421','112/07/24'),
('F1','','16','147*****7693','X12****674','103/07/14');
SELECT *
FROM (  
SELECT ROW_NUMBER() OVER (PARTITION BY function_code,reverse_reason,reason_code
ORDER BY tran_date DESC,agent_code) AS No,*
FROM pp
) AS QQ
WHERE No = 1

Demo

建議:提問時先將資料建好,以免每個邦友都要建一 次。

yamm6205 iT邦新手 5 級 ‧ 2023-08-11 09:15:59 檢舉

謝謝rogeryao大大的幫忙!
收到,下次我知道了^^😊

我要發表回答

立即登入回答