我相信这是一件简单的事情。
说我有一张桌子:
CREATE TABLE kpi
( KPI_ID number(10) NOT NULL,KPI_NAME varchar2(50) NOT NULL,DAY_DATE DATE
);
我知道有人犯了一个错误,并在创建表时将所有100的值加了100。
我需要一个查询,其中从> 100的KPI_ID列中的所有值中减去100。
而且我只能进入读取模式
有人犯了一个错误,并在创建表时将所有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