我正在使用以下查询从一些数据创建一个表:
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.
答案 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;
这假设表有足够的行来生成数字。如果给定的表不够大,则可以使用不同的表。