在列有字符串值的情况下如何使用解码函数

问题描述

我有一个视图 xxabc_v(如下所示),当“值”列总和 (900+(-900)=0) 为“日期”01-Apr-21 的“field_name”值(需求 A+需求 B)。

在上述情况下,如何将解码逻辑放到代码列中?

表结构和预期输出

enter image description here

解决方法

您不想要 decode() 因为一个更简单的方法有效:

select nullif(code,'N/A')

NULL 为指定值时返回 code

如果您确实想更改数据,那么您需要update

update t
    set code = NULL
    where code = 'N/A';

编辑:

我明白了,你有一个额外的条件。所以,使用 case:

(case when code = 'N/A' and
           sum(value) over (partition by id,date) = 0
      then NULL
      else code
 end)
,

我假设你需要日期明智的 id 明智的 sum 何时 sum()。请检查一下:

select date,id,(case when sum(value)over(partition by date,id)=0 and code='N/A' then NULL
else Code end)code,field_name,value
from tablename