首页 > 解决方案 > 当 SELECT 子句中存在 ISNULL 时,如何舍入值中的小数?

问题描述

我在此数据透视表中舍入小数时遇到问题:

在此处输入图像描述

这是代码:

SELECT P.LastName,  [Bike Racks]=ISNULL([Bike Racks],0), [Bottles and Cages]=ISNULL([Bottles and Cages],0), [Bottom Brackets]=ISNULL([Bottom Brackets],0), [Brakes]=ISNULL([Brakes],0)
FROM #TabPivot 
PIVOT (
SUM(Total)
FOR Name IN ( [Bike Racks], [Bottles and Cages], [Bottom Brackets], [Brakes])) AS P
ORDER BY P.LastName;

我尝试使用 ROUND 和 CAST...AS NUMERIC 函数,但没有成功(也许我做错了什么):

SELECT P.LastName,  ROUND([Bike Racks]=ISNULL([Bike Racks],0),2), ...

SELECT P.LastName,  ROUND(([Bike Racks]=ISNULL([Bike Racks],0)),2), ...

SELECT P.LastName,  ROUND(([Bike Racks]=ISNULL([Bike Racks],0), [Bottles and Cages]=ISNULL([Bottles and Cages],0), [Bottom Brackets]=ISNULL([Bottom Brackets],0), [Brakes]=ISNULL([Brakes],0)),2)

SELECT P.LastName,  CAST([Bike Racks]=ISNULL([Bike Racks],0) AS Numeric(15,2))

SELECT P.LastName,  CAST([Bike Racks]=ISNULL([Bike Racks],0)) AS Numeric(15,2)

你可以帮帮我吗?

标签: sqlsql-servertsqlrounding

解决方案


列名不能在函数内部,但在外部,试试这个:

SELECT [Bike Racks] = cast(isnull(0.66666, 0)  as decimal(18,2))

作为替代方案,当您使用 AS 语法指定列名时,可能会更清楚:

SELECT cast(isnull(0.66666, 0)  as decimal(18,2)) AS [Bike Racks]

推荐阅读