# #google-bigquery
Вопрос:
Я пытаюсь разделить столбец, содержащий строки, разделенные запятыми, на строки (простая часть), но также разделить второй столбец на количество элементов в строке, разделенной запятыми.
Ввод —
-------------------- ---- |11710, 11830 | 10 | -------------------- ---- |11711, 11015, 10020 | 9 | -------------------- ----
Ожидаемый результат
------ --- |11710 | 5 | ------ --- |11830 | 5 | ------ --- |11711 | 3 | ------ --- |11015 | 3 | ------ --- |10020 | 3 | ------ ---
Запрос:
#standardSQL WITH `project.dataset.table` AS ( SELECT '11710, 11830' id, 10 hours UNION ALL SELECT '11711, 11015, 10020', 9 ) SELECT * EXCEPT(uniq_id) REPLACE(uniq_id AS id) FROM `project.dataset.table`, UNNEST(SPLIT(id)) uniq_id
Ответ №1:
Попробуй это
WITH data_ AS ( SELECT [11710, 11830] id, 10 hours UNION ALL SELECT [11711, 11015, 10020], 9 ) select itm, cast((hours/array_length(id)) as int64) as div , hours from data_,unnest(id) as itm
Комментарии:
1.
WITH data_ AS ( SELECT [11710, 11830] id, 10 hours UNION ALL SELECT [11711, 11015, 10020], 9 ) select itm, cast((hours/array_length(split(id))) as int64) as div , hours from data_,unnest(id) as itm
Ответ №2:
Основываясь на вашем сценарии совместного использования, вы также можете рассмотреть следующий подход.
WITH `project.dataset.table` AS ( SELECT '11710, 11830' id, 10 hours UNION ALL SELECT '11711, 11015, 10020', 9 ) SELECT TRIM(VALUE) AS id, CAST(HOURS/ARRAY_LENGTH(SPLIT(id,',')) AS INT64) AS HOURS FROM `project.dataset.table`,UNNEST(split(id,',')) AS VALUE