【发布时间】:2018-01-31 15:38:53
【问题描述】:
当连续 NULL 值的数量变化时,寻找有关如何根据先前行中的值填充 NULL 值的答案。看起来 PL/SQL MODEL 子句应该可以做到,但我根本无法弄清楚语法。这是一个玩具数据集:
CREATE TABLE SO_EXAMPLE_TMP (
EXAMPLE_ID VARCHAR2(5)
, SALES_STAGE VARCHAR(16)
, RECORD_MONTH DATE
);
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
INSERT ALL
INTO SO_EXAMPLE_TMP VALUES ('ABC12', 'PIPELINE', '01-JAN-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', NULL , '01-FEB-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', NULL , '01-MAR-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', NULL , '01-APR-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', 'COMMIT' , '01-MAY-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', NULL , '01-JUN-2017')
INTO SO_EXAMPLE_TMP VALUES ('ABC12', 'CLOSED' , '01-JUL-2017')
INTO SO_EXAMPLE_TMP VALUES ('XYZ98', 'PIPELINE', '01-FEB-2017')
INTO SO_EXAMPLE_TMP VALUES ('XYZ98', 'COMMIT' , '01-MAR-2017')
INTO SO_EXAMPLE_TMP VALUES ('XYZ98', NULL , '01-APR-2017')
INTO SO_EXAMPLE_TMP VALUES ('XYZ98', NULL , '01-MAY-2017')
INTO SO_EXAMPLE_TMP VALUES ('XYZ98', 'CLOSED' , '01-JUN-2017')
SELECT 1 FROM DUAL;
我的输出目标是用前一行的值填充 NULL 值,例如SALES_STAGE 列中的第 2-4 行都应将“PIPELINE”显示为值,因为它们当前为 NULL,并且最接近的先前填充值是第 1 行中的“PIPELINE”。同样,第 6 行应该有 SALES_STAGE 的“COMMIT”等。如果有比使用 MODEL 更简单的方法来做到这一点,我也很乐意这样做,只是很难让递归在我想要的地方工作。谢谢。
【问题讨论】:
-
也许这个链接可以帮助你,stackoverflow.com/questions/26977267/…
标签: oracle recursion plsql oracle11g