【问题标题】:How to round off decimals in values when ISNULL exists in SELECT clause? [closed]当 SELECT 子句中存在 ISNULL 时,如何舍入值中的小数? [关闭]
【发布时间】:2021-07-14 18:03:26
【问题描述】:

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

enter image description here

代码如下:

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)

你能帮帮我吗?

【问题讨论】:

  • 示例数据(作为 DDL 和 DML 语句)和预期结果(不作为图像)将帮助我们帮助您。不清楚你在这里问什么
  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 请提供一个minimal reproducible example,我们可以复制粘贴。而不是一堆不同的查询和一些结果在图像中,没有想要的结果。

标签: sql sql-server tsql rounding


【解决方案1】:

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

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]

【讨论】:

  • 它没有出错(查询已执行),但没有四舍五入
  • 对不起,你是对的,它现在应该可以正常工作了。
  • 成功了,谢谢!
【解决方案2】:

您只需要将数据转换为指定正确的比例精度十进制数据类型。

例如

declare @v float=14
select @v/3.066, Cast(@v/3.066 as decimal (5,2))

返回

4.5662100456621 4.57

【讨论】:

    【解决方案3】:

    试试这个:

    Select Convert(Decimal (17,0),[Bike Racks]) AS [Bike Racks with convert]
          ,Floor(ISNULL([Bike Racks], 0)) AS [Bike Racks round down number]
          ,Ceiling(ISNULL([Bike Racks], 0)) AS [Bike Racks round to up number]
    

    您可以在下面的示例中找到其他可用的圆形模型:

    DECLARE @value decimal(10,2)
    SET @value = 11.05
    
    SELECT ROUND(@value, 1)  -- 11.10
    SELECT ROUND(@value, -1) -- 10.00 
    
    SELECT ROUND(@value, 2)  -- 11.05 
    SELECT ROUND(@value, -2) -- 0.00 
    
    SELECT ROUND(@value, 3)  -- 11.05
    SELECT ROUND(@value, -3) -- 0.00
    
    SELECT CEILING(@value)   -- 12 
    SELECT FLOOR(@value)     -- 11 
    

    Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多