Foxtable(狐表)用户栏目专家坐堂 → 想把SQL下面语句中,保留二位小数,老师应该怎么写?


  共有3673人关注过本帖树形打印复制链接

主题:想把SQL下面语句中,保留二位小数,老师应该怎么写?

帅哥哟,离线,有人找我吗?
xxfoxtable
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1765 积分:16651 威望:0 精华:0 注册:2017/6/1 23:12:00
想把SQL下面语句中,保留二位小数,老师应该怎么写?  发帖心情 Post By:2019/5/17 8:13:00 [只看该作者]

(case when  b.金额 is null then 0 else b.金额 end)-(case when  b.实收金额 is null then 0 else b.实收金额 end)-(case when  b.优惠金额 is null then 0 else b.优惠金额 end)) as 余额,

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/17 9:19:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
xxfoxtable
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1765 积分:16651 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2019/5/17 9:30:00 [只看该作者]

round((case when  b.金额 is null then 0 else b.金额 end)-(case when  b.实收金额 is null then 0 else b.实收金额 end)-(case when  b.优惠金额 is null then 0 else b.优惠金额 end)),2) as 余额

round(case when  b.金额 is null then 0 else b.金额 end)-(case when  b.实收金额 is null then 0 else b.实收金额 end)-(case when  b.优惠金额 is null then 0 else b.优惠金额 end),2) as 余额

这二种写法都不行


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/17 9:41:00 [只看该作者]

1、不写round的时候,能否得到数值?

 

2、把代码在sqlserver数据库那里测试,得到什么?报什么错?


 回到顶部
帅哥哟,离线,有人找我吗?
xxfoxtable
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1765 积分:16651 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2019/5/17 10:07:00 [只看该作者]

能得到数值,就是位数太多,在sqlserver数据库那里测试,就显示0,什么错误也不报

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/17 11:03:00 [只看该作者]

参考这里写

 

https://www.cnblogs.com/yeagen/archive/2012/08/27/2658659.html

 

[此贴子已经被作者于2019/5/17 11:02:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
xxfoxtable
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1765 积分:16651 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2019/5/17 11:20:00 [只看该作者]

cast(round((case when  b.金额 is null then 0 else 金额 end)-(case when  b.实收金额 is null then 0 else 实收金额 end)-(case when  b.优惠金额 is null then 0 else b.优惠金额 end),2) as numeric(20,2)) as 余额

我是这样写的,结果还是0


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/17 12:24:00 [只看该作者]

round((case when  b.金额 is null then 0.0 else 金额 end)-(case when  b.实收金额 is null then 0.0 else 实收金额 end)-(case when  b.优惠金额 is null then 0.0 else b.优惠金额 end),2) as 余额

 

如果还有问题,实例发上来测试


 回到顶部
帅哥哟,离线,有人找我吗?
xxfoxtable
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1765 积分:16651 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2019/5/17 12:30:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:data.rar

语句在包里的文本文件里,示例数据是第16  17行

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/17 15:30:00 [只看该作者]

1、语句没问题,数据也没有问题。你金额列的类型是整型,从单价*数量过来的数据本身就已经是错了的啊。

 

2、请重新计算金额列的值,再核对你的结果。


 回到顶部
总数 15 1 2 下一页