Ваш ожидаемый результат не полностью соответствует тому, что вы описываете, потому что запись 2019-01-24 12:51:45.803
из второго набора данных нигде не появляется.Но общее решение, которое могло бы сработать, состояло бы в том, чтобы объединить две таблицы, а затем просто объединить их в пары:
WITH cte AS (
SELECT Id, PersonId, ProcessStepOne AS ProcessStep, 1 AS source,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY ProcessStepOne) rn
FROM table1
UNION ALL
SELECT Id, PersonId, ProcessStepTwo, 2,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY ProcessStepTwo)
FROM table2
)
SELECT
MAX(CASE WHEN source = 1 THEN Id END) AS Id,
PersonId,
MIN(ProcessStep) AS ProcessStepOne,
MAX(ProcessStep) AS ProcessStepTwo
FROM cte
GROUP BY
PersonId,
rn;
Демонстрация
В качестве примечания, вычисляемый столбец source
, который я ввел в запрос CTE объединения, есть, чтобы мы могли запомнить, какое значение Id
соответствуетпервый стол.Это должно соответствовать вашему требованию использовать метки Id
первого источника в ожидаемом выводе.