# #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'))
если применить к образцам данных в вашем вопросе — оба вернутся ниже вывода