SQL Сервер 2016
У меня есть несколько таблиц
Table A Table B Table C Table D
User | DataA User | DataB User | DataC User | DataD
=========== =========== =================== =============
1 | 10 1 | 'hello' 4 | '2020-01-01' 1 | 0.34
2 | 20 2 | 'world'
3 | 30
Поэтому у некоторых пользователей есть данные для A
, B
, C
и / или D
.
Table UserEnabled
User | A | B | C | D
=============================
1 | 1 | 1 | 0 | 0
2 | 1 | 1 | 0 | 0
3 | 1 | 0 | 0 | 0
4 | 0 | 0 | 1 | 0
Таблица UserEnabled
указывает, заинтересованы ли мы в каких-либо данных в соответствующих таблицах A
, B
, C
и / или D
.
Теперь я хочу объединить эти таблицы на User
, но мне нужны только столбцы, в которых в таблице UserEnabled
есть хотя бы один пользователь с 1 (ie хотя бы с одним включенным пользователем). В идеале я хочу присоединиться только к тем таблицам, которые включены, а не отфильтровывать столбцы из отключенных таблиц впоследствии.
Поэтому в результате для всех пользователей я получу
User | DataA | DataB | DataC
===============================
1 | 10 | 'hello' | NULL
2 | 20 | 'world' | NULL
3 | 30 | NULL | NULL
4 | NULL | NULL | '2020-01-01'
Ни один пользователь не имеет D
включен, поэтому он не отображается в запросе
Я собирался создать динамический c SQL, который создается каждый раз, когда я выполняю запрос в зависимости от состояния UserEnabled
но я боюсь, что это будет плохо работать с огромным набором данных, так как каждый раз нужно будет создавать план выполнения. Я хочу динамически отображать только включенные данные, а не столбцы со всеми значениями NULL.
Есть ли другой способ?
При использовании будет таблица данных, которая может быть сгенерирована несколько раз за минут.