Создание данных на уровне строк из диапазона в Teradata

#sql #teradata

Вопрос:

У меня есть таблица, как показано ниже

EMP_NUM START_RNG КОНЕЦ
123 H1 H3
456 H4 H6

и мне нужно, чтобы он выглядел так, как показано ниже.

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

Я задавал аналогичный вопрос в отношении дат в своем предыдущем посте, однако я не думаю 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);
 

Ответ №1:

Не уверен, что это лучший ответ, но, по крайней мере, он был бы синтаксически правильным.

 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
;
 

Возможно, можно использовать РАСШИРЕНИЕ путем искусственного преобразования в диапазон дат/времени и обратно, например

 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;