[SQL]重複的內容只顯示在第一筆其他不顯示

有時候我們在產出excel時,因為資料很多使用者通常會說希望可以相同的內容只顯示一次

以往我都先從DB撈出後,再用C#去做過濾且產生出excel表

此篇主要紀錄 SQL直接產出想要的效果 

前情提要 

 這是一個客服詢問歷程,客服人員希望可以針對他回覆的內容列出清單,方便他清楚明瞭回覆了哪些訊息

一個客服問題會有多次的來回,因此撈出資料時會產生相同的單號有多筆欄位

使用者期望的樣子

 

SQL 解法
  1.  首先我們先將撈出所有的此客服人員回應的資料
  2.  並且根據單號group by (partition by ) 產生出一個Row number (RN)
  3.  1跟2 代表我們想要撈出的table (因此設在from且需要命名 才有辦法取到值) 
  4. 再根據Row number 去case when 如果row = 1 則顯示相對應的資料 否則 就空白
    SELECT 
    CASE WHEN RN  = 1 THEN A.no  ELSE '' END 單號,
    CASE WHEN RN  = 1 THEN A.sub  ELSE '' END 主旨,
    CASE WHEN RN  = 1 THEN A.mail ELSE '' END mail,
    content,userId,response_content
    From
    (
       select RN = ROW_NUMBER() OVER(PARTITION BY h.no ORDER BY h.no  ASC )
       ,h.no,h.sub,h.mail,b.it,b.content,b.userId,b.response_content
       FROM ContactServiceH h
       LEFT JOIN ContactServiceB b ON b.no = h.no 
       WHERE b.userid = '1112'
    ) A
    
    

    這樣就可以產出user想要的樣子囉~~

 


參考資料

  1. https://ithelp.ithome.com.tw/questions/10195230
  2. https://docs.microsoft.com/zh-tw/sql/t-sql/functions/row-number-transact-sql?view=sql-server-ver15