使用 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
我相信这是一件简单的事情。
假设我有一个 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