我有以下查询,不断引发转换错误。我已经尝试了很多方法来完成这项工作,但仍然遇到相同的错误。消除过程我现在想这与硬编码0.715值有关。我不确定是否或如何将其强制为小数点,或者在代码的开头使用SET和变量是否更好。
SELECT CAST(DATEPART(yyyy, YEAR) as INT) AS YEAR,
COUNT(ID) AS ID,
SUM(VALUE) AS VALUE,
SUM(PREMIUM) AS PREMIUM,
SUM(try_convert(float,USERID1)) AS VALUE1,
COALESCE(SUM(PREMIUM)/(SUM(try_convert(float,NULLIF(USERID1,0)))*0.715),0) AS 'PROFIT'
SUM(CAST(USERID1 AS float))/SUM(PREMIUM) AS 'PROFIT%'
INTO #YEAR_VALUE
FROM #DATA LT
INNER JOIN dbo.AccountDB P ON LT.ID = P.ID
GROUP BY INCEPTDATE
任何帮助将不胜感激。
预先感谢
答案 0 :(得分:1)
您有一些逻辑上的后题,您需要先try_parse,然后再执行nullif。如果try_parse无法转换为指定的类型,则通常返回null。然后,您需要将null转换为0.0
coalesce(sum(premium)/(sum(nullif(try_convert(float,'userId),0.0))* 0.715),0.0)AS'profit'
此外,如果期望浮点数或小数,则将0.0设置为零
提示:避免您和他人的视线,无需使用大写字母。那是70年代的
答案 1 :(得分:0)
如前所述,该列中可能包含一些非数字数据。我尽了最大的努力,可以从这里收集到的信息进行快速的模拟,对于输入的数据似乎很有效。只是测试您似乎遇到问题的代码行。
USE DB
GO
CREATE TABLE
Test_Table (
Premium decimal,
userID varchar(20)
)
INSERT INTO
Test_Table VALUES
(
2.5, 1
)
USE DB
GO
SELECT COALESCE(SUM(Premium)/(SUM(try_convert(float,NULLIF(userID,0)))*0.715),0) AS 'PROFIT'
FROM Test_Table;
这可能是某些非数字数据或另一行代码引起的问题。不过,我知道我们的数据和数据类型可能并不完全相同。