是否可以将select语句中的计算输出存储到变量中?

时间:2013-05-22 21:09:07

标签: sql sql-server-2008-r2

我需要使用查询中的两个值执行计算,然后将其存储到变量中。我想知道如何在SQL中完成此操作。这是我到目前为止所尝试的:

DECLARE @result DECIMAL
SELECT @result = val2 / val1 from table

问题是输出错误。

SELECT @result    
Output: 0

如果我不使用变量,则输出正确。

SELECT val2 / val1 from table
Output: 0.0712

我在这里出错的任何想法?

3 个答案:

答案 0 :(得分:3)

小数的默认精度为0(参见here)。

试试这个:

DECLARE @result float;
SELECT @result = cast(val2 as float) / val1 from table;

当两个操作数都是整数时,SQL Server会执行整数除法。所以,我把它扔到漂浮。如果你真的想要小数,那么使用更好的声明,例如:

DECLARE @result decimal(18, 6);

最后,当您的表有多行时,您的选择是不明确的。我建议:

SELECT top 1 @result = cast(val2 as float) / val1 from table;

更好的是,添加一个order by子句,以便您知道要获得哪一行(除非您知道该表只有一行)。

答案 1 :(得分:1)

您的DECIMAL类型应该精确声明。根据val1和val2的数据类型,您可能还需要在计算中的val1和val2上进行强制转换,如下面的代码所示:

DECLARE @result DECIMAL(5,2)
SELECT @result = cast(val2 as decimal(5,2)) / cast(val1 as decimal(5,2)) from table
select @result

答案 2 :(得分:0)

DECLARE @total dec(12,2),@ num int SET @total =(SELECT SUM(Salary)FROM Employee)