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

时间:2018-04-16 11:24:17

标签: sql oracle

我有下表

enter image description here

我需要以下面的格式输出:

EMP_NUM,Current_Department_number,Previous_Department_number

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

示例:从表格到2001年1月至2002年1月,员工102已经开始在第10部门工作,然后他转到他从2002年1月到2003年1月工作的第20部门。

但我需要这样的输出:

EMP_NUM,Current_Department_number,Previous_Department_number

如果您需要任何其他详细信息,请与我们联系!

3 个答案:

答案 0 :(得分:2)

我想你想要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;

答案 1 :(得分:0)

其他方法是使用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;

答案 2 :(得分:0)

尝试此解决方案,它将为当前部门和以前的部门提供:

 ;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