我的目标是在TEMP表(CTE)中填充NULL。 例如,有3手。其中有两个批次在RECIPE栏中具有价值。 但是L3批次没有。但是,材料恰好具有相同的值。 因此,在这种情况下,我可以填写相同的值(在这种情况下为“ 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;
答案 0 :(得分:1)
重新使用with
子句以获取与recipe
相同的material
值,
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子句,但是我建议这样做,如果您使用> = 12c,第二个可以使用FETCH FIRST ROW
的{{1}} insta