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

我相信这是一件简单的事情。
说我有一张桌子:

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

我知道有人犯了一个错误,并在创建表时将所有100的值加了100。
我需要一个查询,其中从> 100的KPI_ID列中的所有值中减去100。
而且我只能进入读取模式

mmly615 回答:使用PLSQL根据条件减去列中的值

  

有人犯了一个错误,并在创建表时将所有100的值加了100 ...我需要小于100的值保持完整,而大于或等于100的值应该是减少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
;

在原始问题中,您说“ 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,day_date
from kpi;
,

“从KPI_ID列中所有> 100的值中减去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

本文链接:https://www.f2er.com/2934114.html

大家都在问