基于值列创建区间变量
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;
我在 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;