Sql 如何对新计算的值进行四舍五入? 选择产品、说明、成本、, 如果产品编号20时,则成本为*1.30 以“新成本”结束 从桌子上 其中“新成本”>19
我不知道将Sql 如何对新计算的值进行四舍五入? 选择产品、说明、成本、, 如果产品编号20时,则成本为*1.30 以“新成本”结束 从桌子上 其中“新成本”>19,sql,oracle,Sql,Oracle,我不知道将ROUND()放在哪里,这样它就可以将我的“新成本”列四舍五入到最接近的100或2位小数,比如100.53。 如何使用alias列对大于19的产品进行排序 将整个案例放在函数调用中。我将使用cast(): SELECT product_c, description, cost, CASE WHEN product_no < 9 THEN cost * 1.10 WHEN product_no BETWEEN 10 AND 15 THEN cost * 1.20
ROUND()
放在哪里,这样它就可以将我的“新成本”列四舍五入到最接近的100或2位小数,比如100.53。
如何使用alias列对大于19的产品进行排序 将整个
案例
放在函数调用中。我将使用cast()
:
SELECT product_c, description, cost,
CASE WHEN product_no < 9 THEN cost * 1.10
WHEN product_no BETWEEN 10 AND 15 THEN cost * 1.20
WHEN product_no BETWEEN 15 AND 20 THEN cost * 1.25
WHEN product_no > 20 THEN cost * 1.30
END AS "New Cost"
FROM table
WHERE "New Cost" > 19
选择产品、说明、成本、,
铸造(如果产品编号<9,则成本为*1.10
如果产品编号介于10和15之间,则成本为*1.20
当产品编号介于15和20之间时,则成本为*1.25
当产品编号>20时,则成本为*1.30
结束)作为小数(10,2))作为“新成本”
从桌子上
其中“新成本”>19
这与
round()
的想法相同,但它仅使用适当的小数位数来存储结果。您提出了两个问题。标题中的一个很简单:
SELECT product_c, description, cost,
CAST((CASE WHEN product_no < 9 THEN cost * 1.10
WHEN product_no BETWEEN 10 AND 15 THEN cost * 1.20
WHEN product_no BETWEEN 15 AND 20 THEN cost * 1.25
WHEN product_no > 20 THEN cost * 1.30
END) as DECIMAL(10, 2)) AS "New Cost"
FROM table
WHERE "New Cost" > 19
也就是说,round()
函数的形式是round(expr,2)
(如果您想将其四舍五入到小数点后两位),而expr
是您的整个CASE
表达式-所有表达式,从单词CASE
开始,一直到单词END
这对于任何函数和任何表达式都是完全相同的-表达式可以是一个大小写表达式,并且它(全部)可以放在任何其他表达式(如文字或列名)可以放的地方
你问的另一个问题的答案是“你不能那样做”
您希望通过SELECT子句中的计算定义“新成本”,并希望在WHERE子句中按“新成本”进行过滤。这不是SELECT语句的处理方式
在SELECT语句中,首先标识表、视图等(行源)。连接/连接条件以及下一步应用条件的位置。只有在此之后(在应用WHERE条件之后),如果没有GROUP BY,处理才会转到SELECT子句。第一次在SELECT子句中定义的内容不能用于WHERE(或HAVING,如果有GROUPBY子句)。如果要使用数据库,了解SQL语句不同部分的处理顺序尤为重要
要解决您的问题,您需要将所有内容都放在子查询中;然后在外部查询中,选择“新成本”>19
中的任何内容
顺便说一下,很少需要使用带引号的列名。养成使用new_cost(或new_cost或new_cost)等名称的习惯。如果没有双引号,Oracle不会在意,它会将它们保存在所有大写字母中,但您可以在任何大写字母中引用它们。我假设您没有一个名为table
的表
像这样的方法应该会奏效:
SELECT ..., cost,
round ( CASE WHEN .....
....END, 2) as "New Cost" ....
选择产品、说明、成本、新成本
从(选择产品、说明、成本、,
四舍五入(如果产品编号<9,则成本为*1.10
如果产品编号介于10和15之间,则成本为*1.20
当产品编号介于15和20之间时,则成本为*1.25
当产品编号>20时,则成本为*1.30
结束,2)作为新成本
来自表A
)
其中新的成本>19
;
我不明白。简单地使用轮(…,2)
有什么缺点?OP没有提到存储,但即使这样,一个四舍五入的数字只有两位小数,如果它存储为数字,那么只有足够的存储空间用于两位小数。@mathguyround()
对值进行舍入,但不会更改基础数据类型。许多查询应用程序仍然会显示任意数量的小数点。我明白了-因此好处不在于严格遵守Oracle及其SQL,而在于数据与应用程序交换。这是有道理的。
SELECT product_c, description, cost, new_cost
FROM ( SELECT product_c, description, cost,
ROUND( CASE WHEN product_no < 9 THEN cost * 1.10
WHEN product_no BETWEEN 10 AND 15 THEN cost * 1.20
WHEN product_no BETWEEN 15 AND 20 THEN cost * 1.25
WHEN product_no > 20 THEN cost * 1.30
END , 2 ) AS new_cost
FROM table_A
)
WHERE new_cost > 19
;