Есть ли лучший и простой способ сделать это? Предположим, у меня 500 групп. Для этого требуется много совместных действий. В приведенном ниже примере у меня есть только 3 LEFT OUTER, поэтому это относительно просто. Если есть лучший способ моделировать это, без этих странных объединений, это может быть и аккуратным, чтобы видеть (а может, иметь таблицу сопоставления/таблицы моста)?T-SQL: сокращение подключений LEFT OUTER в SQL Server
SELECT
[user].id,
'2010-01-01' AS begin_date,
group_a.source AS group_a_id,
group_b.source AS group_b_id,
group_c.source AS group_c_id
FROM
(select distinct id FROM [user]) [user]
LEFT OUTER JOIN [group] group_a ON user.id = group_a.user_id and group_a.type in ('1', '2', '5')
LEFT OUTER JOIN [group] group_b ON user.id = group_b.user_id and group_b.type = '3'
LEFT OUTER JOIN [group] group_c ON user.id = group_c.user_id and group_c.type = '4'
«Предположим, у меня есть 500+ группы» Вы предлагаете вы хотите 500+ столбцы, чтобы показать регистрацию пользователя во всех группах? Могу я предложить не поворачивать это. –
Что будет выглядеть SQL, если бы мы сделали свод? Но у нас все еще есть разные значения типа для каждой группы. – MacGyver