2015-02-08 32 views
0

我总是遇到尝试这样的麻烦。我发现这是一种解决方案,但我很好奇它们是否是一种更好的方法。将转换(Bigint)允许对字符串进行计算

declare @CountByZip as int 
select @CountByZip = convert(decimal(18,4),count(HouseNumbers)) 
from zipcodeDB 
Where zip is not null 

而使用这个作为语句执行没有问题!

Convert(decimal(18,4),Count(case when zip IN ('123', '456', '789') then zip else null end))/@CountByZip 

不过,我很好奇,如果有转换在我的case语句来诠释,并允许在我的例子顶部取出变量和SELECT语句的创建方式。

Convert(Bigint,Convert(decimal(18,4),Count(case when zip IN ('123', '456', '789') then zip else null end))/Count(Zip) 

然而,这将返回 的可怕SQL错误“错误转换数据类型为varchar到数字” 这是什么让我切换到我的声明语句在顶部。

是否可以执行我的第二个例子?

+0

所有这些'converts'没有意义。我不认为你需要任何'convert'。尝试简单的表达式,不用任何“转换”,并告诉我们你有什么问题。 – 2015-02-08 23:04:37

+0

我在这里使用的转换是这样的,它将显示一个小数,'转换(十进制(18,4),计数(当压缩IN('123','456','789')然后zip另外空结束) )/ @ CountByZip'有没有更好的方法来显示小数? – user2676140 2015-02-09 13:00:33

+0

我不明白你想要什么,你的问题是什么。换句话说,试着解释你的目标是什么。 – 2015-02-10 06:24:22

回答

0

尝试使用这样的事情

cast(count(case when zip in ('123', '456', '789') then zip else null end)*1/whateveryourdividingby as decimal(10,4)) 
相关问题