Создайте новый столбец, который содержит список подстрок из другого столбца - PullRequest
0 голосов
/ 16 января 2019

У меня есть следующая таблица с «Column1», «Column2» и «Column3»

Column1                                 Column2  Column3
ABC - Loading                              22   3815
ABC - Loading of Page                      49   5131
Enter -CDE - Any action with target        74   2798
Exit -CDE - Any action with target2        35   3351
ACE Wireless - loading1                    12   9910
All -ACE Wireless - Click1                 49   6060
GATE - click or touch on egh               76   6061
GATE - click or touch on plans             100  6020
HUB - loading of def                       90   4854
All -HUB - Click or Touch on poe           82   2754

Мне нужно создать «NewColumn», где мне нужно извлечь определенные строки из списка (CDE, ACE, GATE, HUB) и поиск в столбце «1» следующим образом:

Column1                                 Column2  Column3  NewColumn
ABC - Loading                              22   3815        ABC
ABC - Loading of Page                      49   5131        ABC
Enter -CDE - Any action with target        74   2798        CDE
Exit -CDE - Any action with target2        35   3351        CDE
ACE Wireless - loading1                    12   9910        ACE
All -ACE Wireless - Click1                 49   6060        ACE
GATE - click or touch on egh               76   6061        GATE
GATE - click or touch on plans             100  6020        GATE
HUB - loading of def                       90   4854        HUB
All -HUB - Click or Touch on poe           82   2754        HUB

Обратите внимание, что поиск по ключевым словам не повторяется.

Я пробовал различные команды, такие как EXTRACT, SUBSTRINGи т.д. Но ни одна из команд, на которые я смотрел, не работает для моего конкретного запроса.

Я ищу руководство в RedShift SQL о том, как я могу создать «NewColumn» со списком, который ищет ключевое слово из «Column1»* * 1011

1 Ответ

0 голосов
/ 16 января 2019

Это будет первое обнаружение, которое соответствует одному из значений в списке, приведенном в вопросе.

select
    Column1,
    Column2,
    Column3,
    regexp_substr(Column1, 'CDE|ACE|GATE|HUB') AS NewColumn
from
    your_table;

РЕДАКТИРОВАТЬ: Для размещения @TimBiegeleisen

select
    Column1,
    Column2,
    Column3,
    regexp_substr(
        Column1,
        (SELECT LIST_AGG(item, '|') FROM table_of_codes)
    ) AS NewColumn
from
    your_table;

Или ...

select
    your_table.Column1,
    your_table.Column2,
    your_table.Column3,
    table_of_codes.item
from
    your_table
inner join
    table_of_codes
        on yourTable.col3 LIKE '%' + table_of_codes.item + '%'
;

Или много таких вариаций.

(где таблица table_of_codes содержит одну строку на код, которым вы являетесьищу.)

...