我想编写一个查询,根据repeat列中的值复制每一行。输入表数据如下所示
Products, Repeat
----------------
A, 3
B, 5
C, 2
现在在输出数据中,产品A应重复3次,B应重复5次,C应重复2次。输出结果如下所示
Products, Repeat
----------------
A, 3
A, 3
A, 3
B, 5
B, 5
B, 5
B, 5
B, 5
C, 2
C, 2
任何人都可以建议我在Teradata中如何做到这一点吗?
答案 0 :(得分:0)
有几种方法可以获得此结果:
#1:对于具有连续值JOIN
的数字表,经典SQL将是ON n BETWEEN 1 AND Repeat
,具体取决于actula数据可能需要大量CPU
#2:递归选择,只要Repeat
是一个小数字
WITH RECURSIVE cte AS
(
SELECT t.*, repeat - 1 AS lvl -- counting down to zero
FROM tab AS t
WHERE repeat > 0
UNION ALL
SELECT Products, repeat, lvl-1 FROM cte
WHERE lvl > 0
)
SELECT Products, repeat_
FROM cte
#3:滥用EXPAND ON
PERIOD
的专有语法,但效率最高:
SELECT *
FROM tab
EXPAND ON PERIOD(DATE '2000-01-01', DATE '2000-01-01' + repeat_) AS pd