объедините 4 столбца в 2 в BigQuery

# #sql #google-bigquery

#sql #google-bigquery

Вопрос:

Я пытаюсь очистить исходные данные из 1 таблицы и вставить их в новую таблицу.

  • У меня есть следующая таблица
ID Активный первичный Бездействующий первичный Активная вторая Бездействиесекундный
1 1,2,3 31,32,33,34
2 2 14,16 21 31,33,37
3 1,3,2,3 11,15,16 24,27,29
4 4,6,7,8,9 11 21,26,27 38
5 24,27 36,38,39
6
  • Я хочу добиться следующего
  • Я хочу объединить ActivePrimary и ActiveSecondary как активные
  • Я хочу объединить InactivePrimary и InactiveSecondary как неактивные
ID Активный Неактивный
1 1,2,3 31,32,33,34
2 2,21 14,16,31,33,37
3 1,3,2,3,24,27,29 11,15,16
4 4,6,7,8,9,21,26,27 11,38
5 24,27 36,38,39
6 нулевой нулевой

Обратите внимание, что дефиса(-) там нет.

У меня есть следующий запрос, но он также использует дефис(-) и объединяет его, как в примере ниже

ID Активный Неактивный
1 1,2,3,- -,31,32,33,34
 SELECT  ID,  CONCAT(AlarmsPrimaryActive, ",", AlarmsSecondaryActive) AS active,  CONCAT(AlarmsPrimaryInactive, ",", AlarmsSecondaryInactive) AS active FROM  `table`  

Сейчас я пытаюсь понять, работает ли выбор. После этого я вставлю его в новую таблицу.

Ответ №1:

Здесь есть много вариантов — рассмотрим ниже несколько подходов

Вариант 1

 select id,   (select string_agg(value)  from unnest(split(ActivePrimary) || split(ActiveSecondary)) value  where value != '-' ) as Active,  (select string_agg(value)  from unnest(split(InactivePrimary) || split(InactiveSecondary)) value  where value != '-' ) as Inactive  from your_table   

Вариант 2

 select * from (  select id, if(value = '-', null, value) as value,   regexp_extract(status, r'Active|Inactive') as status  from your_table  unpivot (value for status in (ActivePrimary,InactivePrimary,ActiveSecondary,InactiveSecondary)) ) pivot (string_agg(value) for status in ('Active', 'Inactive'))   

если применить к образцам данных в вашем вопросе — оба вернутся ниже вывода

введите описание изображения здесь