微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据服务年限显示员工职位

如何解决根据服务年限显示员工职位

我想按照任期的长短来展示还在活跃(目前没有辞职)的员工列表,他们的任期是按照年限的,即:0-5年,6-10年,11- 20 年,21-30 年,> 30 年。还说明了每个任期的职位。因为在 1 个任期内可能有 1 个以上列出的职位,所以职位用逗号表示 出现:服务年限、金额、职位。

我已经尝试过这段代码,但它不能如我所愿。

SELECT TIMESTAMPDIFF(year,A.JoinDt,SYSDATE()) AS 'Years Of Service',COUNT(A.EmpCode) AS 'Amount',B.PosName
FROM tblemployee A
INNER JOIN tblposition B ON A.PosCode = B.PosCode
WHERE A.ResignDt IS NULL
GROUP BY B.PosName

这是我期待的

服务年限 金额 职位名称
0-5 10 经理
6-10 10 经理
11-20 10 经理
21-30 10 经理
>30 10 经理

有人可以帮我吗?谢谢

Ps :上面的数量和位置名称,只是输出一个例子。抱歉,由于客户的条款和条件,我无法提供输入脚本

解决方法

**SQL QUERY SHOULD WORK LIKE THIS:

LISTAGG Function may needs to be replaced as it don't support every database but we need to look for alternative function.** 



SELECT A.'Years Of Service',A.PosName,LISTAGG(PosName,'; ')
         WITHIN GROUP (ORDER BY PosName) as "Aggregated_Pos_name",A.Amount

FROM   (SELECT CASE WHEN (SYSDATE()- a.joindt)/365 <= 5 THEN '0-5'
WHEN (SYSDATE()- a.joindt)/365 BETWEEN 6 AND 10 THEN '6-10'
END AS 'Years Of Service',COUNT(A.EmpCode) AS 'Amount',B.PosName
FROM tblemployee A
INNER JOIN tblposition B ON A.PosCode = B.PosCode
WHERE A.ResignDt IS NULL)A
GROUP BY A.Years of Service;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。