如何根据 Teradata 中的列值复制表行?

问题描述

有人可以帮助完成这项任务吗?如果我在 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