我有一个t-sql语句,通过将varchar值转换为小数来汇总它们。如果不存在值,则返回0.
我收到的错误是“将数据类型varchar转换为数字时出错”。如果没有返回结果数据 ,则只会出现 。
select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
//...multiple inner joins
//...and multiple filter criteria
由于没有数据,我想到的解决方法是执行select计数以检测是否存在任何行,然后执行以下语句。有没有更好的解决方案?
答案 0 :(得分:2)
当没有数据存在时,以下所有答案都不起作用。除了执行if存在之外,找不到任何其他方法。
这是更大的sql脚本的一部分,这个特定的部分是更新临时表。
if exists(select * from table inner join...where...)
being
select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
...inner joins
...where clause
end
<强>更新强>
错误的实际原因是因为where子句发生转换,并且在运行where子句之前的连接上发生错误。内连接返回空值。
答案 1 :(得分:1)
你的isnull在错误的地方。
sum(convert(decimal(28,8),isnull(myColumn,0)))
将空值转换为0然后转换为十进制,然后最后求和。
答案 2 :(得分:0)
sum(convert(decimal(28,8), isnull(myColumn,'0'))
答案 3 :(得分:0)
仅仅为了记录,有些人更喜欢COALESCE:
sum(convert(decimal(28,8), COALESCE(myColumn,'0'))
答案 4 :(得分:0)
我希望此查询可以帮助您
select isnull(sum(convert(decimal(28,8),isnull(myColumn,0))), 0)
from myTable