根据其他数据自动填写

Filling in based on other data Automatically

我的目标是在 TEMP table(CTE) 中填写 NULL。 例如,有 3 个地块。其中两批恰好在 RECIPE 栏中具有价值。 但是 Lot L3 没有。但是,MATERIAL 恰好具有相同的值。 因此,在这种情况下,我可以填写相同的值(在这种情况下 'R1')。 如何在我的代码中修改 WITH 子句?

Expected result is 

"LOTNO" "MATERIAL"  "RECIPE"
------- ---------- --------
"L1"    "M1"    "R1"
"L2"    "M1"    "R1"
"L3"    "M1"    "R1"

我的密码是

 CREATE TABLE OUTHISTORY (LOTNO VARCHAR(10), MATERIAL VARCHAR(10), RECIPE VARCHAR(10));
    INSERT INTO OUTHISTORY VALUES('L1','M1','R1');
    INSERT INTO OUTHISTORY VALUES('L2','M1','R1');
    INSERT INTO OUTHISTORY VALUES('L3','M1',NULL);
    
    WITH TEMP AS (
    SELECT * FROM OUTHISTORY  --How to modify here?
    ) SELECT * FROM TEMP;

Re-use with 子句获取与

相同的 material 数字的 recipe
with temp 
as 
(
  select * 
    from outhistory  --How to modify here?
),
temp_with_filled_null
as
(
select lotno,material,
 coalesce (recipe
          ,(select recipe
              from temp i
             where i.lotno != o.lotno
               and i.material = o.material
               and rownum = 1)) recipe
  from temp o
)
select *
  from temp_with_filled_null;

在这里你可以避免第二个 with 子句,但我建议这样做,第二个你可以使用 FETCH FIRST ROW 代替 ROWNUM 如果你使用 >=12c