从 Teradata 中的范围创建行级数据

Create Row level data from a range in Teradata

我有一个 table 如下所示

EMP_NUM START_RNG END_RNG
123 H1 H3
456 H4 H6

我需要它看起来像下面的那个。

EMP_NUM ID
123 H1
123 H2
123 H3
456 H4
456 H5
456 H6

我在之前的 post 中就日期提出了类似的问题,但我认为 EXPAND ON 不会起作用,因为它适用于时间段。有没有办法在 Teradata 中解决这个问题。我也是递归的新手。尝试了以下逻辑,但在 Teradata 中出现错误。不确定是否存在替代语法。

WITH temp AS
(
   SELECT 1 AS ID 
   UNION ALL 
   SELECT t.ID + 1 FROM temp t
   WHERE t.ID < 100000
) -- return table with id from 1 to 100000
SELECT t.ID,  y.EMP_NUM
FROM Table1 y
INNER JOIN temp t ON t.ID BETWEEN y.START_RNG AND y.END_RNG
OPTION (MAXRECURSION 0);

不确定这是最佳答案,但至少它在语法上是正确的。

WITH RECURSIVE temp AS
(
   SELECT * from (SELECT 1 AS ID) z
   UNION ALL 
   SELECT t.ID + 1 FROM temp t
   WHERE t.ID < 100
) -- return table with id from 1 to 100000
SELECT t.ID,  y.EMP_NUM
FROM Table1 y
INNER JOIN temp t ON t.ID BETWEEN y.START_RNG AND y.END_RNG
;

可以通过人为转换到 date/time 范围并返回来使用 EXPAND ON,例如

SELECT begin(PD)-date'1900-01-01' as ID, EMP_NUM
FROM Table1 
EXPAND ON PERIOD(date'1900-01-01'+START_RNG,date'1900-01-01'+END_RNG+1) as PD;