问题描述
有人可以帮助完成这项任务吗?如果我在 teradata 中有一张如下表:
caseid | 内容 | 重复 |
---|---|---|
id1 | row1 | 2 |
id2 | row2 | 3 |
我想基于重复值构建一个新表,如下所示。我该怎么办?
caseid | 内容 | 重复 | groupid |
---|---|---|---|
id1 | row1 | 2 | 1 |
id1 | row1 | 2 | 2 |
id2 | row2 | 3 | 1 |
id2 | row2 | 3 | 2 |
id2 | row2 | 3 | 3 |
谢谢!
解决方法
你可以使用递归 cte:
with recursive cte as (
select *,1 groupid from cases
union all
select caseid,content,repeat,groupid + 1 groupid
from cte
where groupid < repeat
)
select * from cte
order by caseid
caseid | content | repeat | groupid -----: | :------ | -----: | ------: 1 | row1 | 2 | 1 1 | row1 | 2 | 2 2 | row2 | 3 | 1 2 | row2 | 3 | 2 2 | row2 | 3 | 3
dbfiddle here
,Teradata 专有的 EXPAND ON 语法创建时间序列并可用于此任务:
SELECT t.*
-- convert period back to int,End(pd) - Current_Date AS groupid
FROM mytable AS t
-- works on date/time only -> convert int to period
EXPAND ON PERIOD(Current_Date,Current_Date + repeat) AS pd