select a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000) as sumquan
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between @socode1 and @socode2 AND a.lay = @Level-1
以上代码,当a.ta021 为 decimal(18,4) 的时候,sumquan 的值为 38.0000, 当a.ta021 为 float 的时候,sumquan 的值为 37.9011
现在问题是 a.ta021 一定是 decimal(18,4) , 但又想值为37.9011 , SQL语句怎么写呢
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between @socode1 and @socode2 AND a.lay = @Level-1
以上代码,当a.ta021 为 decimal(18,4) 的时候,sumquan 的值为 38.0000, 当a.ta021 为 float 的时候,sumquan 的值为 37.9011
现在问题是 a.ta021 一定是 decimal(18,4) , 但又想值为37.9011 , SQL语句怎么写呢
解决方案 »
- MS-SQL 2005备份问题,大家帮忙看看!
- 出错提示
- 首字母小写转大写
- 请问如何查询varchar类型字段的最大值(字母数字混合的)
- SQL 某字段包含某字段怎么表述
- 如何实现T1.A,COUNT(T2.A)where T2.A=T1.A,COUNT(T3.A) where T3.A=T1.A FROM T1,T2,T3
- 请各位看看我这样写对不对呢?--小妹在线等待答复,谢谢啦
- 怎么进入和使用OSQL,ISQL
- 存储过程 类型转换
- 不允许从数据类型 money 到 nvarchar 的隐性转换。请使用 CONVERT 函数来运行此查询。
- 排序更新问题
- AdventureWorks的相关设计问题
when 1 then ceiling(a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000)) end as sumquan,
a.ta003,a.lay
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001'
如果没有case,倒还是会显示小数的,如果加了case就自动取整了,好奇怪.
end as sumquan
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001' 如上写法也是有小数的.
只是多加了一个判断,就全部取整了.
when 1 then ceiling(2) end as sumquan
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001'
以上写法,也有小数
select a.ta001,
a.ta002,
d.cinvcode,
case b.ifint when 0 then LTRIM(STR(a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000),18,4) )
when 1 then ltrim(ceiling(a.ta021*1.0000*d.de1/d.de2*(1.0000+d.de3/100.0000-d.de4/100.0000))) end as sumquan,
a.ta003,a.lay
from Cmocta a left join cbom c on a.cinvcode = c.cinvcode left join cbomson d on c.bomid=d.bomid
left join ainventory b on d.cinvcode=b.cinvcode
where a.ta003 between 'G1204-0001' and 'G1204-0001'