Плохо сформулированный заголовок мои извинения.
Я пытаюсь присоединить таблицу к одной из двух других таблиц
MasterTable
подтаблица
SubTableArchive
Итак, MasterTable содержит поле идентификатора.
SubTable и SubTableArchive содержат поле MasterTableId для объединения.
Но данные будут когда-либо существовать только в одной из этих вложенных таблиц. Поэтому я просто хочу присоединиться к любой таблице, в которой есть данные.
Но единственный способ, которым я знаю, - это присоединиться к обоим и использовать isnull's во всех полях, которые я выбрал, и это быстро становится сложным для чтения (и записи).
Тем более, что некоторые поля уже обернуты в ISNULL
SELECT M.Id, ISNULL(S.Field1, SA.field1), ISNULL(S.field2, SA.Field2),
SUM(CASE WHEN (ISNULL(S.Finished,SA.Finished)=1 AND ISNULL( ISNULL(S.ItemCode,SA.ItemCode),'')='') THEN 1 WHEN (ISNULL(S.Finished,SA.Finished)=0 AND ISNULL( ISNULL(S.AltItemCode,SA.AltItemCode),'')='') THEN 1 ELSE 0 END) AS SummaryField
FROM MAsterTable M
LEFT OUTER JOIN SubTable S ON S.MasterTableId = M.Id
LEFT OUTER JOIN SubTableArchive SA ON S.MasterTableId = M.Id
GROUP BY M.Id, ISNULL(S.Field1, SA.field1), ISNULL(S.field2, SA.Field2)
Так что это работает, но это не красиво.
Это образец, но реальные запросы длиннее и запутаннее.
Я надеялся, что в SQL могли быть встроены некоторые функции условного объединения.
Что-то сделать, что я пытаюсь сделать, и оставить запрос немного дружелюбнее.