如何复制值

时间:2016-04-18 04:47:20

标签: teradata

我想编写一个查询,根据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中如何做到这一点吗?

1 个答案:

答案 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