Разделить одну строку на несколько строк в SQL с равным количеством - PullRequest
1 голос
/ 20 марта 2020

У меня есть таблица, которая содержит идентификатор, столбец суммы и столбец счета. Для каждой строки я хотел бы разбить их на несколько строк, основываясь на столбце count. Затем я хотел бы, чтобы столбец количества равномерно распределялся между этими строками, и создавал новый идентификатор на основе исходного идентификатора и количества строк. Вот как выглядит таблица:

ID      Amount   Count
1001    8        2
1002    15       3

И это желаемый результат

ID      Amount
1001-1  4
1001-2  4
1002-1  5
1002-2  5
1002-3  5

Каков наилучший подход для этого?

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

К сожалению, Redshift не поддерживает рекурсивные запросы.

Вот еще один вариант использования временной таблицы чисел.

create temp table tmp(n int);
insert into tmp(n) values (1), (2), (3), (4), ...; -- expand as needed

select concat(t.id, '-', p.n) id, t.amount/t.count amount
from mytable t
inner join tmp p on p.n <= t.count
order by t.id, p.n
0 голосов
/ 20 марта 2020

Вы можете использовать рекурсивный CTE. Это выглядит примерно так:

with recursive cte as (
      select id, amount / cnt as amount, cnt, 1 as lev 
      from t
      union all
      select id, amount, cnt, lev + 1
      from t
      where lev < cnt
     )
select id || '-' || lev, amount
from cte;

Обратите внимание, что используется стандартный синтаксис; точный синтаксис может варьироваться в зависимости от вашей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...