Sql 无法获得精确的小数百分比结果?
我创建了以下存储过程来计算百分比,它工作得很好,但我始终无法得到准确的结果 例如,98.000而不是98.947Sql 无法获得精确的小数百分比结果?,sql,sql-server,stored-procedures,casting,sql-server-2012,Sql,Sql Server,Stored Procedures,Casting,Sql Server 2012,我创建了以下存储过程来计算百分比,它工作得很好,但我始终无法得到准确的结果 例如,98.000而不是98.947 。我相信,要做到这一点,您需要一个实值函数,或者更好的是,正如其他人所指出的,您的过程需要一个十进制输出参数。。我认为,您需要一个实值函数来实现这一点,或者,更好地说,正如其他人所指出的,您的过程需要一个十进制输出参数。另一种可能是使用out参数 Alter PROCEDURE sp_finger_calc_percent(@return_status decimal(18,4) o
。我相信,要做到这一点,您需要一个实值函数,或者更好的是,正如其他人所指出的,您的过程需要一个十进制输出参数。。我认为,您需要一个实值函数来实现这一点,或者,更好地说,正如其他人所指出的,您的过程需要一个十进制输出参数。另一种可能是使用out参数
Alter PROCEDURE sp_finger_calc_percent(@return_status decimal(18,4) out)
AS
DECLARE @no_action decimal(18,4);
DECLARE @yes_action decimal(18,4);
SELECT @no_action = COUNT(*)
FROM Action INNER JOIN
Employee ON Action.b_num = Employee.b_num INNER JOIN
Department ON Employee.dep_id = Department.dep_id
WHERE (Department.dep_id = 50) AND (Action.action = 0);
SELECT @yes_action= COUNT(*)
FROM Action INNER JOIN
Employee ON Action.b_num = Employee.b_num INNER JOIN
Department ON Employee.dep_id = Department.dep_id
WHERE (Department.dep_id = 50) AND (Action.action = 1);
If(@no_action = 0.00)
select @return_status= 100.00
Else select @return_status = cast( (100.00 *(@yes_action /@no_action ) )as decimal(18,4))
;
召唤
另一种可能是使用out参数
Alter PROCEDURE sp_finger_calc_percent(@return_status decimal(18,4) out)
AS
DECLARE @no_action decimal(18,4);
DECLARE @yes_action decimal(18,4);
SELECT @no_action = COUNT(*)
FROM Action INNER JOIN
Employee ON Action.b_num = Employee.b_num INNER JOIN
Department ON Employee.dep_id = Department.dep_id
WHERE (Department.dep_id = 50) AND (Action.action = 0);
SELECT @yes_action= COUNT(*)
FROM Action INNER JOIN
Employee ON Action.b_num = Employee.b_num INNER JOIN
Department ON Employee.dep_id = Department.dep_id
WHERE (Department.dep_id = 50) AND (Action.action = 1);
If(@no_action = 0.00)
select @return_status= 100.00
Else select @return_status = cast( (100.00 *(@yes_action /@no_action ) )as decimal(18,4))
;
召唤
更改为Alex K提到的输出参数:
CREATE PROCEDURE sp_finger_calc_percent
@RETURNVALUE DECIMAL(18,4) OUTPUT
AS
...
If(@no_action = 0.00)
SET @RETURNVALUE = 100.00
Else SET @RETURNVALUE = cast( (100.00 *(@yes_action /@no_action ) )as decimal(18,4))
;
更改为Alex K提到的输出参数:
CREATE PROCEDURE sp_finger_calc_percent
@RETURNVALUE DECIMAL(18,4) OUTPUT
AS
...
If(@no_action = 0.00)
SET @RETURNVALUE = 100.00
Else SET @RETURNVALUE = cast( (100.00 *(@yes_action /@no_action ) )as decimal(18,4))
;
它应该可以正常工作。返回100.00*@yes\u action/@no\u action作为小数点18,4是正确的,还是返回100.00*@yes\u action/@no\u action+@yes\u action作为小数点18,4?仅供参考,您可以在表格的一次传递中选择@yes\u action=SUMAction.action,@no\u action=SUMcase action.action当0然后1从…结束时,它应该可以正常工作。返回100.00*@yes\u action/@no\u action作为小数点18,4正确,还是返回100.00*@yes\u action/@no\u action+@yes\u action作为小数点18,4正确?仅供参考,您可以在表格的一次传递中选择@yes\u action=SUMAction.action,@no_action=SUMcase action.action当0然后1结束于。。。