有時候我們在產出excel時,因為資料很多使用者通常會說希望可以相同的內容只顯示一次
以往我都先從DB撈出後,再用C#去做過濾且產生出excel表
此篇主要紀錄 SQL直接產出想要的效果
前情提要
這是一個客服詢問歷程,客服人員希望可以針對他回覆的內容列出清單,方便他清楚明瞭回覆了哪些訊息
一個客服問題會有多次的來回,因此撈出資料時會產生相同的單號有多筆欄位
使用者期望的樣子
SQL 解法
- 首先我們先將撈出所有的此客服人員回應的資料
- 並且根據單號group by (partition by ) 產生出一個Row number (RN)
- 1跟2 代表我們想要撈出的table (因此設在from且需要命名 才有辦法取到值)
- 再根據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想要的樣子囉~~
參考資料