Следующая таблица состоит из столбцов EmployeeID, JobNum, CompDate. По сути, есть 3 разных сотрудника, у которых есть определенные идентификаторы работы и их завершенная дата, связанная с ними. Есть некоторые jobNum, которые не связаны с конкретным EmployeeID и могут иметь полную дату.
Проблема: 1) Удалите записи для EmployeeID, если дата завершения не равна нулю или заполнена датой.
2) Удалите запись, которая имеет нулевые значения для обоих столбцов JobNum и CompDate для сотрудника, ЕСЛИ существует запись для этого EmployeeID, которая состоит из открытой работы (когда JobNum НЕ NULL, а CompDate имеет значение NULL). ЭТО ДЛЯ Дубликатов.
Пытался использовать функцию ранжирования с операторами case. Не ранжируется должным образом.
[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