You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多列匹配值清空/修改数据行中的值?

基于多列匹配值清空/修改数据行中的值

本问题需要基于其他列的匹配属性,仅操作特定列的行数据。给定数据集包含物品相关信息:物品ID(ID)、时间周期(ATTR2,即月份)、关联人员(Name)、人员角色(ATTR1)。

核心需求

当某个人在特定月份为某个物品承担多个角色时,仅保留一行有效数值,其余该匹配组合下的条目需设为0或空值。有效行需根据ATTR1字段的排名(ATTR1_RANK)选取:例如Ash在2021年1月为物品900001担任R1-R6角色,共6行数据,仅ATTR1=R1的行保留有效数值,其余行需更新为0或空值。

补充说明

R1、R2并非总是存在,有时可能仅包含R7、R9或R4、R6等角色。

示例数据(MRE)

with tbl ( ID   ,ATTR2  ,Name   ,ATTR1  ,   ATTR1_RANK  ,Col1   ,Col2   ,Col3   ,Col4 ) as   (

select  '900001'    ,'JAN-21'   ,'Ash'  ,'R1',  1   ,100    ,200    ,300    ,50     from dual union
select  '900001'    ,'JAN-21'   ,'Ash'  ,'R2',  2   ,100    ,200    ,300    ,50     from dual union
select  '900001'    ,'JAN-21'   ,'Ash'  ,'R3',  3   ,100    ,200    ,300    ,50     from dual union
select  '900001'    ,'JAN-21'   ,'Ash'  ,'R4',  4   ,100    ,200    ,300    ,50     from dual union
select  '900001'    ,'JAN-21'   ,'Ash'  ,'R5',  5   ,100    ,200    ,300    ,50     from dual union
select  '900001'    ,'JAN-21'   ,'Ash'  ,'R6',  6   ,100    ,200    ,300    ,50     from dual union
select  '790001'    ,'JUN-22'   ,'Jon'  ,'R1',  1   ,9900   ,-91    ,-91    ,8181       from dual union
select  '790001'    ,'JUN-22'   ,'Jon'  ,'R2',  2   ,9900   ,-91    ,-91    ,8181       from dual union
select  '790001'    ,'AUG-22'   ,'Jon'  ,'R1',  1   ,9900   ,-91    ,-91    ,8181       from dual union
select  '790001'    ,'AUG-22'   ,'Jon'  ,'R2',  2   ,9900   ,-91    ,-91    ,8181       from dual  )

select * from tbl ;

我的思路与问题

目前的实现思路:仅筛选满足count(rows) over ( partition by ID, ATTR2, Name ) > 1的行,在这些数据中,再筛选满足count(*) over ( partition by ID, ATTR2, Name order by ATTR1_RANK ) >1的行并将其设为0。

我已经能识别需要修改的行,但不清楚如何合并/更新数据,同时希望写出适配百万级数据的高效算法。


内容的提问来源于stack exchange,提问作者Joe_sushi39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:22:55