微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据其他数据自动填写

如何解决根据其他数据自动填写

我的目标是在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 举报,一经查实,本站将立刻删除。