微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何根据 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 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。