Лучшее, что вы сможете сделать, - это использовать внутренние объединения, чтобы получить совпадения, затем объединиться с левыми объединениями и отфильтровать их, чтобы они возвращали только нули.Это, вероятно, не решит вашу проблему.
Я не знаю специфики вашей системы, но я предполагаю, что вы сталкиваетесь с проблемами производительности, поэтому вы хотите использовать индексированное представление.Есть несколько альтернатив, но я думаю, что следующее является наиболее подходящим.
Поскольку вы прокомментировали это для DW, я собираюсь предположить, что ваша система более интенсивна при чтениях, чем при записи, и что данные загружаютсяв это по расписанию процесса ETL.В такой ситуации высокого уровня чтения / низкого уровня записи * я бы порекомендовал вам «материализовать» это представление, что означает, что при запуске процесса ETL генерируется таблица с вашим начальным оператором выбора, который включает левые объединения.Вы примете удар при записи, тогда все ваши чтения будут наравне с производительностью индексированного представления (вы будете делать то же самое, что и индексированное представление, за исключением пакета, а не построчно).Если ваши исходные БД и DW находятся в одном и том же экземпляре, это лучший выбор, чем индексированное представление, поскольку это не повлияет на производительность исходной системы (индексированные представления замедляют вставки).Это та же концепция, что и в индексированном представлении, потому что вы берете удар производительности на вставку, чтобы ускорить выбор.
Я уже шел по этому пути и пришел к следующему выводу:
Индексированное представление с большей вероятностью будет частью решения, чем всем решением.
*, когда я сказал «высокое чтение / низкая запись» выше, вы можететакже думайте об этом как "высокая чтение / запись по расписанию"