下表由 EmployeeID、JobNum、CompDate 列组成。基本上有 3 名不同的员工具有特定的工作 ID 和与他们相关的完成日期时间。有一些 jobNum 与特定的 EmployeeID 没有关联,并且可能有一个完整的日期。
问题:1) 当 Complete date 不为 null 或填充了日期时,删除 EmployeeID 的记录。
2) 当该 EmployeeID 的记录包含一个空缺职位时(当 JobNum 不为 NULL 且 CompDate 为 NULL 时),删除该员工的 JobNum 和 CompDate 列都具有空值的记录。这是重复的。
尝试使用带有案例陈述的排名函数。排名不正确。
[JobNum],
[CompDate],
RANK ( ) OVER( PARTITION BY [EmployeeID] ORDER BY
CASE WHEN ([JobNum] is null AND [CompDate] is null) THEN 1
WHEN ([JobNum] is not null AND [CompDate] is null) THEN 2
WHEN ([JobNum] is not null AND [CompDate] is not null) THEN 3
END ASC) as Rank
FROM [dbo].test1
WHERE [EmployeeID] IN (SELECT [EmployeeID] FROM dbo.test1
GROUP BY [EmployeeID]
HAVING COUNT(*) > 1)
EmployeeID JobNum CompDate Rank
1 NULL NULL 1
1 401 NULL 2
1 435 NULL 2
1 358 2019-07-15 15:10:57.810 4
2 285 NULL 1
2 299 2019-07-15 15:14:04.603 2
2 305 2019-07-14 15:10:57.810 2
2 330 2019-06-13 10:10:30.710 2
3 NULL NULL 1
3 435 NULL 2
3 402 2019-07-11 13:10:47.610 3
Ex:
EmployeeID JobNum CompDate Rank
Delete this -> 1 NULL NULL 1
when this exists -> 1 401 NULL 2
when this exists -> 1 435 NULL 2
1 358 2019-07-15 15:10:57.810 4