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

使用PLSQL根据条件减去列中的值,sql,oracle,subtraction,Sql,Oracle,Subtraction,我相信这是一件简单的事情。 假设我有一张桌子: CREATE TABLE kpi ( KPI_ID number(10) NOT NULL, KPI_NAME varchar2(50) NOT NULL, DAY_DATE DATE ); 我知道有人犯了一个错误,在创建表时,向所有大于100的值中添加了100。 我需要一个查询,其中从KPI_ID列中大于100的所有值中减去100。 我只能访问读取模式使用更新。您唯一拥有的数字是kpi_id,因此我假设这是您所指的列: update k

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

CREATE TABLE kpi
( KPI_ID number(10) NOT NULL,
  KPI_NAME varchar2(50) NOT NULL,
  DAY_DATE DATE
);
我知道有人犯了一个错误,在创建表时,向所有大于100的值中添加了100。 我需要一个查询,其中从KPI_ID列中大于100的所有值中减去100。 我只能访问读取模式

使用更新。您唯一拥有的数字是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;
使用更新。您唯一拥有的数字是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;
有人犯了一个错误,在创建表时将100添加到所有大于100的值中。。。我需要价值观​​小于100的应保持完整,大于或等于100的应减少100

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

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。我修改后的解决方案实现了您评论中的算法,前提是最近声明的需求总是正确的

有人犯了一个错误,在创建表时将100添加到所有大于100的值中。。。我需要价值观​​小于100的应保持完整,大于或等于100的应减少100

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

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。我修改后的解决方案实现了您评论中的算法,前提是最近声明的要求总是正确的。

从KPI_ID列中大于100的所有值中减去100的查询

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

从KPI_ID列中大于100的所有值中减去100的查询

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

最后,所需要的只是一份案例陈述:
案例当KPI_ID>100时,则KPI_ID-100否则KPI_ID以KPI_ID结束。最后需要的是案例陈述:
当KPI_ID>100时,则KPI_ID-100否则KPI_ID以KPI_ID结尾

@NikitaPronin。您将使用select查询。但是如果数据是错误的,数据应该被修正。@NikitaPronin。您将使用select查询。但如果数据错误,则应修复数据。isnull不是Oracle函数。标记为[oracle]的问题需要该平台的解决方案。使用[sql]标记仅仅表明这个问题与编写数据库查询有关;这并不意味着问题是关于MS SQL Server的,[SQL Server]标记表明了这一点。哦,很抱歉,我错过了它。isnull不是Oracle函数。标记为[oracle]的问题需要该平台的解决方案。使用[sql]标记仅仅表明这个问题与编写数据库查询有关;这并不意味着问题是关于MS SQL Server的,[SQL Server]标记表明了这一点。哦,对不起,我没有找到它。我需要值​​小于100的值应保持不变,大于或等于100的值应减少100I​​小于100的应保持完整,大于或等于100的应减少100