员工表和需要以以下格式输出

Posted

技术标签:

【中文标题】员工表和需要以以下格式输出【英文标题】:Employee table and need output in the below format 【发布时间】:2018-04-16 11:24:16 【问题描述】:

我有下表

我需要以下格式的输出:

EMP_NUM,Current_Department_number,Previous_Department_number

表格中的开始和结束日期(列)代表员工在特定部门工作了特定时间段。

示例:从表中,员工 102 从 2001 年 1 月到 2002 年 1 月开始在部门 10 工作,然后他从 2002 年 1 月到 2003 年 1 月搬到了部门 20。

但我需要这样的输出:

EMP_NUM,Current_Department_number,Previous_Department_number

如果您需要任何其他详细信息,请告诉我!

【问题讨论】:

如果雇主工作超过2个部门,你会只显示第一个和最后一个吗? 您目前没有人为任何部门工作,对吗? 欢迎来到 Stack Overflow!这是一个您可以就您编写的软件遇到的问题提出问题并获得答案的网站,但它不是“为我做作业”或“为我做我的工作”的网站。当您提出问题时,您应该包括您编写的代码和您遇到的具体错误或您的程序产生的结果以及您预期的结果的解释。没有这些,我们真的无能为力帮助您。请编辑您的问题以显示您所做的事情并告诉我们代码存在哪些问题。再次,欢迎来到 Stack Overflow! @Pelin,如果雇主工作超过 2 个部门,则应将当前部门显示为当前部门,其他部门显示为以前的部门 【参考方案1】:

我想你想要lag():

select emp_num, dept_id as Current_Department_number,
       lag(dept_id) over (partition by emp_num order by start_date) as previous_department_number
from t;

【讨论】:

【参考方案2】:

其他方法是使用subquery

select EMP_NUM, dept_id as Current_Department_number, 
      (select top 1 dept_id from table 
       where EMP_NUM = t.EMP_NUM and start_date < t.start_date order by start_date) as Previous_Department_number
from table t;

【讨论】:

【参考方案3】:

试试这个解决方案,它会给当前部门和以前的部门:

 ;WITH EmployeeCTE AS (
    SELECT EMPID,
    DEPTID = 
        STUFF((SELECT TOP(2)',' + CONVERT(varchar(10), DEPTID )
               FROM EMPDEPT b 
               WHERE b.EMPID = a.EMPID 
               ORDER BY JDATE DESC
              FOR XML PATH('')), 1, 1, '')
    FROM EMPDEPT a
    GROUP BY EMPID
    )
    SELECT
    EMPID,
    (SELECT Substring(DEPTID, 1, 
    CASE WHEN  CHARINDEX(',', DEPTID ) = 0 then LEN(DEPTID) 
    ELSE CHARINDEX(',', DEPTID) -1 END
    )) as CurrentDept ,
    (SELECT Substring(DEPTID, Charindex(',', DEPTID) + 1, LEN(DEPTID))) as PreviousDept
    FROM EmployeeCTE

【讨论】:

以上是关于员工表和需要以以下格式输出的主要内容,如果未能解决你的问题,请参考以下文章

7-13 统计工龄

将 ctree 输出转换为 JSON 格式(用于 D3 树布局)

7-6 统计工龄 (20 分)

需要在 psql 中以特定格式输出

10-排序4 统计工龄 (20分)

[Hash散列] 7-1 统计工龄 (15分)