Я пытаюсь скопировать DO l oop из SAS в Oracle PL / SQL. По сути, этот DO l oop выполняет итерации по таблице и создает несколько строк для одного сотрудника. Я не очень хорошо знаком с циклами в PL / SQL, поэтому любая помощь приветствуется. Я не могу придумать способ воссоздать это, кроме как создать множество таблиц, а затем объединить их. Я объясню больше о моих мыслях в конце; пока, пожалуйста, посмотрите пример данных и того, что делает SAS DO l oop.
HIST_EMPLOYEE Таблица:
+----------+----------+--------+
| EMPLOYEE | START_YR | END_YR |
+----------+----------+--------+
| JOHN | 2013 | 2014 |
| WILL | 2012 | 2016 |
| MARK | 2012 | 2012 |
+----------+----------+--------+
DO l oop в SAS:
DATA HIST_EMPLOYEE_NEW;
SET HIST_EMPLOYEE;
DO YR = START_YR TO END_YR;
OUTPUT;
END;
RUN;
Вывод:
+----------+----------+--------+------+
| EMPLOYEE | START_YR | END_YR | YR |
+----------+----------+--------+------+
| JOHN | 2013 | 2014 | 2013 |
| JOHN | 2013 | 2014 | 2014 |
| WILL | 2012 | 2016 | 2012 |
| WILL | 2012 | 2016 | 2013 |
| WILL | 2012 | 2016 | 2014 |
| WILL | 2012 | 2016 | 2015 |
| WILL | 2012 | 2016 | 2016 |
| MARK | 2012 | 2012 | 2012 |
+----------+----------+--------+------+
Я бы решил эту проблему (которая не эффективна в любом случае) - создать таблицы, отфильтрованные по END_YR < START_YR + i
, где i is from 0 to 10
, затем создайте столбец YR
, затем объедините все таблицы. Я могу обсудить это дальше, но я уже чувствую, что это плохой способ делать вещи.