增加和分裂

时间:2015-04-22 15:27:41

标签: sql sql-server

我需要帮助进行一次小数的除法计算。我试图总结并划分结果。我的Y和X是整数。

execute_async()

这是我得到的结果:

SELECT a.YearMonth,
       (CONVERT(DECIMAL(9,1),Y_Service)+(CONVERT(DECIMAL(9,1),x_Service)/2)) AS Average_Of_Period
FROM table_IB a
  INNER JOIN table_UB b ON a.YearMonth=b.YearMonth 

正确答案是:YearMonth| Average_Of_Period 2015-03 276318.500000

我的Y和X值从4位到6位不等

3 个答案:

答案 0 :(得分:3)

看起来您的操作是(y)+(x / 2)?

应该是(y + x)/ 2?

答案 1 :(得分:0)

可读性至关重要。如果你在计算之前必须做一些丑陋的演员表,你总是可以使用公共表格表达式或outer apply

select
    a.YearMonth,
    (calc.Y_Service + calc.x_Service) / 2 as Average_Of_Period
from table_IB as a
    inner join table_UB as b on a.YearMonth = b.YearMonth 
    outer apply (select
       CONVERT(DECIMAL(9,1), Y_Service) as Y_Service,
       CONVERT(DECIMAL(9,1), x_Service) as x_Service
    ) as calc

然后你不要错过你正在做Y_Service + x_Service / 2而不是(Y_Service + x_Service) / 2

答案 2 :(得分:0)

改用它;它更容易:

select (x + y)/2.0

将小数点添加到2会将结果从整数除法更改为标准除法。由于同样的原因,这也有效:

select (x + y)*1.0/2

如果你想显式转换小数,最容易先添加 - 正如其他评论者提到的那样,这样可以更容易发现数学错误:

select cast(x + y as decimal(10,2))/2