Redshift SQL - функция обратного Листагга - PullRequest
0 голосов
/ 15 апреля 2020

Предположим, у меня есть таблица, подобная приведенной ниже:

Name   Order
 AA     1,2
 BB     2,3

Я хочу, чтобы мой результат был таким:

Name   Order
 AA      1
 AA      2
 BB      2
 BB      3

Как мне добиться этого в Redshift?

Спасибо!

1 Ответ

1 голос
/ 15 апреля 2020

Предполагая, что вы заранее знаете максимальное количество элементов в списке с разделителями, вы можете сделать это с помощью таблицы чисел и split_part():

select t.name, split_part(t.order, ',', n.n) val
from (
    select 1 n
    union all select 2
    union all select 3
) n
inner join mytable t
    on n.n <= regexp_count(t.order, ',') + 1

вы можете расширить производную таблицу n с помощью больше чисел по мере необходимости. Также возможно использовать row_number() против большой таблицы для создания таблицы чисел.

...