基于值列创建区间变量

create an interval variable based on a value column

我在 MS SQL 服务器上工作。我有一个数据集,其中的一个子集如下所示:

id;tax
cvw;8525
jhf;9958
dsf;10843
dsd;12001
xyz;12999
dgs;13586
das;14001
fsa;16428

现在,我想用它的值替换(或创建一个新列,无论哪种方式都可以)税列中的一些值,但是高于 9999 的每个值都被放置在一个间隔中,增量为 1000。所以它看起来像这样:

id;tax;tax_replaced
cvw;8525;8525
jhf;9958;9958
dsf;10843;10000
dsd;12001;12000
xyz;12999;12000
dgs;13586;13000
das;14001;14000
fsa;16428;16000

我试图找到一种简单的方法来对此进行编码,但到目前为止都失败了。我曾想过在具有 2 列的临时 table 中创建间隔,然后从那里导出列 "tax_replaced",但我找不到实现它的方法。欢迎提出任何建议!

此致, /T.

最简单的方法可能是将您的值减去模 return。

DECLARE @val INT = 16428

select @val - (@val%1000)

将其放入您的代码中:

SELECT *, 
CASE WHEN tax >= 10000 THEN tax - (tax%1000) ELSE tax END AS tax_replaced

您似乎需要 case 表达式:

select *, (case when tax > 9999 
                then floor(tax / 1000) * 1000
                else tax
            end) as tax_replaced
from table t;

您也可以使用 % 运算符:

select *, (case when tax > 9999 
                then tax - (tax % 10000)
                else tax
           end) as tax_replaced
from table t;

保持 tax 不变,如果它小于或等于 10000,否则将其替换为 floor(tax / 1000) * 1000

UPDATE elbat
       SET tax = floor(tax / 1000) * 1000
       WHERE tax > 10000;