首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带负号的sqlserver sum

带负号的sqlserver sum
EN

Stack Overflow用户
提问于 2015-10-27 20:51:25
回答 4查看 131关注 0票数 1

我使用sqlserver 2012。我有一个这样的查询

代码语言:javascript
复制
SELECT SUM(TH.CLEAVE_EARN_DAY), SUM(TH.CLEAVE_DAY), 
       SUM(TH.CLEAVE_EARN_DAY) - SUM(TH.CLEAVE_DAY) 
FROM TH_LEAVE_CARD TH 

结果是0,14.5,-15,所以-15是错误的。必须为-14.5

有什么建议吗?

EN

回答 4

Stack Overflow用户

发布于 2015-10-27 21:25:53

这就是你可以尝试的

代码语言:javascript
复制
SELECT SUM(TH.CLEAVE_EARN_DAY), SUM(TH.CLEAVE_DAY), 
   SUM(TH.CLEAVE_EARN_DAY)*1.0 - SUM(TH.CLEAVE_DAY) 
FROM TH_LEAVE_CARD TH 

乘以1.0将只返回十进制值,减去将得到您所要求的值

票数 3
EN

Stack Overflow用户

发布于 2015-10-27 21:12:31

尝试将所有参数转换为相同的数据类型,然后进行计算:

代码语言:javascript
复制
SELECT
  SUM(CAST(TH.CLEAVE_EARN_DAY AS DECIMAL(18,2))),
  SUM(CAST(TH.CLEAVE_DAY AS DECIMAL(18,2))), 
  SUM(CAST(TH.CLEAVE_EARN_DAY AS DECIMAL(18,2)) 
    - CAST(TH.CLEAVE_DAY AS DECIMAL(18,2))) AS substraction 
FROM TH_LEAVE_CARD TH 

您还可以组合:

代码语言:javascript
复制
SUM(TH.CLEAVE_EARN_DAY) - SUM(TH.CLEAVE_DAY) 

至(如果两列均为NOT NULL):

代码语言:javascript
复制
SUM(TH.CLEAVE_EARN_DAY - TH.CLEAVE_DAY)

或者(感谢Arvo指出):

代码语言:javascript
复制
SUM(ISNULL(TH.CLEAVE_EARN_DAY,0) - ISNULL(TH.CLEAVE_DAY,0))
票数 0
EN

Stack Overflow用户

发布于 2017-07-08 16:40:49

要对列执行数学运算,请执行以下操作:

  1. Used列应转换为相同的数字/小数数据类型。
  2. 若要处理空值,可以使用ISNULL函数。例如:

从TH_LEAVE_CARD中选择SUM(TH.CLEAVE_EARN_DAY)、SUM(TH.CLEAVE_DAY)、SUM(cast (TH.CLEAVE_EARN_DAY) as decimal(5,1)) - SUM(cast ( (TH.CLEAVE_DAY) as decimal(5,1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33368474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档