Ниже для BigQuery Standard SQL
#standardSQL
SELECT customer_id,
LOGICAL_OR((category, value) = ('A', 'A')) AS a_a,
LOGICAL_OR((category, value) = ('A', 'B')) AS a_b,
LOGICAL_OR((category, value) = ('A', 'C')) AS a_c,
LOGICAL_OR((category, value) = ('B', 'A')) AS b_a,
LOGICAL_OR((category, value) = ('B', 'B')) AS b_b
FROM `project.dataset.table1`
JOIN `project.dataset.table2`
USING (customer_id)
GROUP BY customer_id
Вы можете проверить, поиграть с выше, используя пример данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table1` AS (
SELECT 1 Customer_ID, 'Bob' Name UNION ALL
SELECT 2, 'Jenny' UNION ALL
SELECT 3, 'Janice'
), `project.dataset.table2` AS (
SELECT 1 Customer_ID, 'A' Category, 'A' Value UNION ALL
SELECT 1, 'A', 'B' UNION ALL
SELECT 1, 'B', 'A' UNION ALL
SELECT 2, 'B', 'B'
)
SELECT customer_id,
LOGICAL_OR((category, value) = ('A', 'A')) AS a_a,
LOGICAL_OR((category, value) = ('A', 'B')) AS a_b,
LOGICAL_OR((category, value) = ('A', 'C')) AS a_c,
LOGICAL_OR((category, value) = ('B', 'A')) AS b_a,
LOGICAL_OR((category, value) = ('B', 'B')) AS b_b
FROM `project.dataset.table1`
JOIN `project.dataset.table2`
USING (customer_id)
GROUP BY customer_id
с результатом
Row customer_id a_a a_b a_c b_a b_b
1 1 true true false true false
2 2 false false false false true
В случае, если вам нужно / нужно выводить данные точно так же, как в вашем вопросе - вы можете использовать ниже настроенную версию
#standardSQL
SELECT customer_id,
IF(LOGICAL_OR((category, value) = ('A', 'A')), 'TRUE', '') AS a_a,
IF(LOGICAL_OR((category, value) = ('A', 'B')), 'TRUE', '') AS a_b,
IF(LOGICAL_OR((category, value) = ('A', 'C')), 'TRUE', '') AS a_c,
IF(LOGICAL_OR((category, value) = ('B', 'A')), 'TRUE', '') AS b_a,
IF(LOGICAL_OR((category, value) = ('B', 'B')), 'TRUE', '') AS b_b
FROM `project.dataset.table1`
JOIN `project.dataset.table2`
USING (customer_id)
GROUP BY customer_id
с результатом
Row customer_id a_a a_b a_c b_a b_b
1 1 TRUE TRUE TRUE
2 2 TRUE
Примечание: в приведенных выше примерах - в действительности вам не нужны объединения, поскольку вы не используете поля из таблицы1, а не как фильтр (для представления только пользователей из таблицы1)