如何更正此 T-SQL 语法以获得没有小数位的输出?

How to correct this T-SQL syntax to get an output with no decimal places?

我正在使用 SQL Server 2016,我的查询中有以下 T-SQL 代码:

CAST(ROUND([Count of Bookings] * 100.0 / SUM([Count of Bookings]) OVER (PARTITION BY [Market Final], [PropertyCode]), 0) AS NVARCHAR(15)) + '%'

此代码的当前输出示例为:40.000000000000%

我期望输出为:40%

注意(我不知道这是否相关):如果我将 nvarchar(x) 中的数字更改为小于 15,我会收到以下错误:

Arithmetic overflow error converting expression to data type nvarchar.

ROUND() 函数的任何输入的 return 类型取决于输入数据类型,如您在 MSDN 中所见。

这会导致您的 ROUND() 变为 return 带小数点的数据类型(在此计算中为 float),您必须在转换为 [=13 后将其截断=](或将其转换为 int 之前)。

使用str()代替cast():

str(round([Count of Bookings] * 100.0 /
          sum([Count of Bookings]) over(PARTITION BY [Market Final], [PropertyCode]
         ) , 0), 3, 0)  + '%'

实际上,我认为默认情况下 str() 轮(文档在这个问题上是否还不够清楚?):

str([Count of Bookings] * 100.0 /
    sum([Count of Bookings]) over (PARTITION BY [Market Final], [PropertyCode]
                                  ), 3, 0)  + '%'