我有下表
我需要以下面的格式输出:
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
如果您需要任何其他详细信息,请与我们联系!
答案 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