【问题标题】:Display employee position based on years of service根据服务年限显示员工职位
【发布时间】:2021-09-13 04:24:53
【问题描述】:

我想根据任期长短显示一个仍然在职(此时未辞职)的员工名单,他们的任期以年为单位,即: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

这是我所期待的

Years Of Service Amount Position Name
0-5 10 Manager
6-10 10 Manager
11-20 10 Manager
21-30 10 Manager
>30 10 Manager

有人可以帮帮我吗?谢谢

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

【问题讨论】:

  • 请标记您的关系型数据库

标签: sql database group-by case union


【解决方案1】:
**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;

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 2017-08-31
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多