如何解决根据其他数据自动填写
我的目标是在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','R1');
INSERT INTO OUTHISTORY VALUES('L3',NULL);
WITH TEMP AS (
SELECT * FROM OUTHISTORY --How to modify here?
) SELECT * FROM TEMP;
解决方法
重新使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。