使用常规方法嗯想,终于想出来了

具体思路:

先将表格进行排序,然后根据具体的序号想出之后之后字符串拼接的次数

当序号为1时,返回自己本身

当序号为2时,返回自己本身拼接上一个

当序号为3时,返回自己本身拼接上一个在拼接上上一个

会得到一个相同部门然后拼接名字为三角形依次增加的结果

现在依旧解决不掉问题,因为答案是不需要那些重复的拼接或者返回的

因为在满足序号为2的条件再拼接的时候,序号为3中也有序号为2的,也是满足该条件的,也是可以进行拼接的,但是答案是不需要的,

同理,满足序号为1的条件进行直接返回时,序号为3中存在序号为1的,序号为2中也存在序号为1的,会对结果造成干扰,

但是它们前面一列的相同的值的个数不同,所以可以根据这个情况来设置条件只有同时满足两个条件的,才可以完成拼接或者直接返回值

SELECT *
FROM
(SELECT dept_no,
CASE
WHEN `rank`=3
    THEN CONCAT_WS(',',LAG(emp_no,2) OVER(PARTITION BY dept_no),LAG(emp_no) OVER(PARTITION BY dept_no),emp_no)
WHEN `rank`=2 AND COUNT(dept_no) OVER(PARTITION BY dept_no)=2
    THEN CONCAT_WS(',',LAG(emp_no) OVER(PARTITION BY dept_no),emp_no)
WHEN `rank`=1 AND COUNT(dept_no) OVER(PARTITION BY dept_no)=1
    THEN emp_no
END AS `case`
FROM
(SELECT dept_no,emp_no,
RANK() OVER(PARTITION BY dept_no
           ORDER BY emp_no) AS `rank`
FROM dept_emp) AS `A`) AS `B`
WHERE `case` IS NOT NULL