根据其他数据自动填写
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
我的目标是在 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