我有以下查询,以获取EmployeeId =的员工的位置历史记录:
SELECT
e.EmployeeId,
el.EmployeeLocationId,
oe.OfficeExtensionId,
oe.Label,
[of].OfficeId as 'OfficeId',
[of].Name as 'Office Name',
el.LocationDate AS LocationStartDate,
LEAD(el.LocationDate) OVER (
ORDER BY
el.LocationDate) AS LocationEndDate
FROM
Employee_Location el
LEFT JOIN
Employee e
ON el.EmployeeId = e.EmployeeId
LEFT JOIN
OfficeExtension oe
ON el.OfficeExtensionId = oe.OfficeExtensionId
INNER JOIN
Office [of]
ON oe.OfficeId = [of].OfficeId
WHERE
el.EmployeeId = 5625
这是我的输出:
EmployeeId EmployeeLocationId OfficeExtensionId OfficeExtensionId Label LocationDateStart LocationDateEnd
5625 6265 156 156 Romania NULL 2019-04-09 08:15:37.9583552
5625 6265 156 156 Romania 2019-04-09 08:15:37.9583552 2019-07-02 11:00:24.4420116
5625 6390 83 83 Spain 2019-07-02 11:00:24.4420116 NULL
我想在没有LocationDateStart的位置将NULL值设置为LocationDateEnd,所以我的预期输出应如下所示:
EmployeeId EmployeeLocationId OfficeExtensionId OfficeExtensionId Label LocationDateStart LocationDateEnd
5625 6265 156 156 Italy NULL NULL
5625 6265 156 156 Romania 2019-04-09 08:15:37.9583552 2019-07-02 11:00:24.4420116
5625 6390 83 83 Spain 2019-07-02 11:00:24.4420116 NULL
答案 0 :(得分:2)
只需将LEAD()
函数包装在CASE
表达式内:
el.LocationDate AS LocationStartDate,
CASE WHEN el.LocationDate IS NOT NULL THEN LEAD(el.LocationDate)
OVER (ORDER BY el.LocationDate)
END AS LocationEndDate,