使用 PLSQL 根据条件减去列中的值

Subtracting a value in a column based on condition using PLSQL

我相信这是一件简单的事情。
假设我有一个 table:

CREATE TABLE kpi
( KPI_ID number(10) NOT NULL,
  KPI_NAME varchar2(50) NOT NULL,
  DAY_DATE DATE
);

而且我知道有人犯了一个错误,在创建 table 时将所有大于 100 的值都加了 100。
我需要一个查询,其中从 KPI_ID 列中 >100 的所有值中减去 100。
而且我只能访问阅读模式

使用update。您拥有的唯一数字是 kpi_id,因此我假设这是您所指的专栏:

update kpi
    set kpi_id = kpi_id - 100
    where kpi_id > 100;

如果您只想查询:

select kpi_id - 100 as kpi_id, kpi_name, day_date
from kpi;

someone made a mistake and added 100 to all values higher than 100 when the table was created ... I need values ​​that are less than 100 to remain intact, and those that are greater than or equal to 100 should be reduced by 100

您需要有条件地对 KPI_ID 应用调整。为此,我们使用 case() 语句:

select case when (kpi_id - 100) >= 100 then 
         kpi_id - 100 
       else
         kpi_id 
       end as kpi_id
       , kpi_name
       , day_date
from kpi
;

在你原来的问题中你说 "all values in KPI_ID column that are >100" 但在你最新的评论中你说 "greater than or equal to 100"。我修改后的解决方案根据您的评论实施算法,假设最近声明的要求总是正确的。

"a query where 100 is subtracted from all values in KPI_ID column that are >100"

SELECT KPI_ID-100 as KPI_ID,KPI_NAME,DAY_DATE  FROM kpi WHERE KPI_ID >100 

最后只需要一个 CASE 语句:
CASE WHEN KPI_ID > 100 then (KPI_ID -100) ELSE KPI_ID END AS KPI_ID