Ниже для стандартного SQL BigQuery
Шаг # 1 - сгенерируйте сводный запрос
#standardSQL
SELECT CONCAT(
"SELECT Customer_ID,",
STRING_AGG(CONCAT("COUNTIF(Style='", Style, "') ", Style)),
" FROM `project.dataset.your_table` GROUP BY Customer_ID ORDER BY Customer_ID")
FROM (
SELECT DISTINCT Style
FROM `project.dataset.your_table`
ORDER BY Style
)
Если вы запустите его с фиктивными данными из вашего вопроса, как показано ниже
#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 'MEM014' Customer_ID, 'BLS87' Style UNION ALL
SELECT 'KAR810', 'DR126' UNION ALL
SELECT 'NIKE61', 'MMQ5' UNION ALL
SELECT 'NIKE61', 'MMQ5' UNION ALL
SELECT 'STT019', 'BLS83' UNION ALL
SELECT 'STT019', 'BLS84' UNION ALL
SELECT 'STT019', 'BLS87'
)
SELECT CONCAT(
"SELECT Customer_ID,",
STRING_AGG(CONCAT("COUNTIF(Style='", Style, "') ", Style)),
" FROM `project.dataset.your_table` GROUP BY Customer_ID")
FROM (
SELECT DISTINCT Style
FROM `project.dataset.your_table`
ORDER BY Style
)
вы получите следующий сводный запрос
SELECT Customer_ID,COUNTIF(Style='BLS83') BLS83,COUNTIF(Style='BLS84') BLS84,COUNTIF(Style='BLS87') BLS87,COUNTIF(Style='DR126') DR126,COUNTIF(Style='MMQ5') MMQ5 FROM `project.dataset.your_table` GROUP BY Customer_ID
Шаг # 2 - запустить сгенерированный сводный запрос
, если вы запустите его для своего манекенаdata - вы получите ожидаемый результат
Row Customer_ID BLS83 BLS84 BLS87 DR126 MMQ5
1 KAR810 0 0 0 1 0
2 MEM014 0 0 1 0 0
3 NIKE61 0 0 0 0 2
4 STT019 1 1 1 0 0
Примечание 1 : выше предполагается, что имена стилей соответствуют соглашению имен столбцов (как в вашем примере).Если нет - вам потребуется экранировать неподдерживаемые символы и т. Д. (Простая настройка для шага 1)
Примечание 2 : максимальная длина неразрешенного запроса составляет 256 КБ.Поэтому, если ваши имена стилей аналогичны именам в вашем примере - решение, приведенное выше, будет поддерживать около 8500 стилей, что должно быть меньше предела (10K?) Для числа столбцов в таблице