Redshift / Postgres SQL - 将顺序数据拆分为多行

时间:2021-06-14 22:44:22

标签: sql amazon-redshift

我正在使用以下查询从一些数据创建一个表:

CREATE TABLE TableA AS
SELECT
    color,
    TRIM(Year) as year,
    ...
FROM
    TableB;

在大多数情况下 year 将是一年,但在某些情况下我们可以有例如2003-2006

如何创建表格使其转动

color | year
blue | 2003-2006

进入

color | year
blue | 2003
blue | 2004
blue | 2005
blue | 2006

我尝试摆弄 generate_series,但鉴于我们的版本,它似乎不起作用:

dev=# CREATE TEMPORARY TABLE series_test AS SELECT generate_series(1,3); 
INFO:  Function "generate_series(integer,integer)" not supported.
ERROR:  Specified types or functions (one per INFO message) not supported on Redshift tables.

1 个答案:

答案 0 :(得分:0)

为此您需要生成某种类型的计数表。说 10 年就够了,你可以这样做:

with n as (
      select row_number() over () as n
      from tableb
      limit 10
     )
select t.from_year + n.n - 1, t.color
from (select t.*,
             (case when year like '%-%' then split_part(year, '-', 1)::int
                   else year::int
              end) as from_year,
             (case when year like '%-%' then split_part(year, '-', 2)::int
                   else year::int
              end) as to_year
      from t
     ) t join
     n
     on t.from_year + n.n - 1 <= t.to_year;

这假设表有足够的行来生成数字。如果给定的表不够大,则可以使用不同的表。