Re: [SQL ] 列出一個欄位中開始變化的前後值

看板Database (資料庫)作者 (小小寶的媽)時間8年前 (2016/04/30 23:08), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串7/10 (看更多)
※ 引述《JeremyJoung (J.J.)》之銘言: : 老實說 這個需求不算難 但是你指定的輸出格式並不佳 : 大幅提升了計算難度 : 理想的輸出最好是 : 同一個人在"同一行"內用多個欄位來表示UNIT的差異 而不是用"多行"顯示 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^這個顯示方法也是ok的 主要是找出有換單位的人,顯示方式倒是其次 但若一個人不只換了一個單位 您建議的顯示方式是否就不適合了呢? : SELECT a.* : FROM table AS a : LEFT JOIN table b ON a.id=b.id && a.year=b.year-1 && a.unit<>b.unit : LEFT JOIN table c ON a.id=c.id && a.year=c.year+1 && a.unit<>c.unit : WHERE a.id IN(SELECT id FROM table GROUP BY id HAVING COUNT(DISTINCT unit) >1) : ##先取有換單位的人 : && (b.id IS NOT NULL || c.id IS NOT NULL) : ORDER BY a.id, a.year DESC : 這還不是最好的算式 但是夠快了 簡短比較重要 : a.id IN() 是用來加速的 實際上可以完全不用 : 缺點是年份要相連 否則抓不到 : 也有年分不用相連的方法 但是又會更複雜 : ※ 引述《Schematic (小小寶的媽)》之銘言: : : 資料庫名稱:SQL SERVER : : 資料庫版本:2012 : : 內容/問題描述: : : 列出某位員工在哪一年換了單位,沒有換單位的員工不用列出 : : Num id year unit : : -------------------------- : : 1 1 99 A : : 2 1 98 B : : 3 1 97 B : : 4 1 96 B : : 1 2 99 B : : 2 2 98 B : : 3 2 97 B : : 1 3 97 C : : 2 3 96 C : : 3 3 95 C : : 4 3 94 B : : 1 4 97 A : : 2 4 96 B : : 3 4 95 B : : 預期結果,員工1在99年從B單位換到A單位 : : id year unit : : ----------------------- : : 1 99 A : : 1 98 B : : 3 95 C : : 3 94 B : : 4 97 A : : 4 96 B : : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.181.197 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1462028896.A.669.html

05/02 19:23, , 1F
可以的 就算是多次換單位都可以計算
05/02 19:23, 1F
文章代碼(AID): #1N9CfWPf (Database)
討論串 (同標題文章)
文章代碼(AID): #1N9CfWPf (Database)