Josien подошел ближе и дал мне идею второго решения, чтобы сделать это! Это не требует, чтобы я сделал вычисления и таким образом это немного более надежно. Но это все еще не очень красиво.
SELECT
[COMBI].[X1] AS [X1],
COALESCE([XY].[X2], [COMBI].[X2]) AS [X2],
[COMBI].[X3] AS [X3],
COALESCE([XY].[X4], [COMBI].[X4]) AS [X4],
COALESCE([XY].[X5], [COMBI].[X5]) AS [X5],
[COMBI].[X6] AS [X6],
[COMBI].[Y1] AS [Y1],
COALESCE([XY].[Y2], [COMBI].[Y2]) AS [Y2],
[COMBI].[Y3] AS [Y3]
FROM (
SELECT
[X].[Identity] AS [X_Identity],
[Y].[Identity] AS [Y_Identity],
[X].[X1] AS [X1],
[X].[X2] AS [X2],
[X].[X3] AS [X3],
[X].[X4] AS [X4],
[X],[X5] AS [X5],
[X].[X6] AS [X6],
[Y].[Y1] AS [Y1],
[Y].[Y2] AS [Y2],
[Y].[Y3] AS [Y3]
FROM
[X]
CROSS JOIN
[Y]
} AS [COMBI]
LEFT OUTER JOIN
[XY]
ON
[XY].[X_Identity] = [COMBI].[X_Identity]
AND
[XY].[Y_Identity] = [COMBI].[Y_Identity]
Я действительно забыл о КОАЛЕССЕ. :-)
Единственное, что у него небольшая проблема! Хотя XY может иметь значение, одно из его полей все еще может иметь значение NULL. Если это так, он не переопределит значение из X или Y значением NULL из XY, но сохранит старое значение.
Поэтому это хорошее решение, но мне нужно переопределить значения из X и Y с помощью все значения из XY, даже если они равны NULL.