,CASE WHEN
sq.Total_Sales > 0 THEN
CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
ELSE 0
END AS Conversion_Rate
有人可以帮我解释为什么我最后无法添加%?我收到“将varchar值'25%'转换为数据类型int”时出现“转换失败”错误。
示例数据:
所以从查询返回的列只能是单一类型,对吧?在查看查询时,db引擎会在CASE
语句中看到两种类型:
CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
生产VARCHAR(11)
0
,在ELSE
部分,是一个INT
数据库引擎尝试将它们合并到INT,并且由于“5%”无法转换为INT,因此会出错。你需要将你的ELSE 0
改为生产varchar
的东西,比如ELSE '0%'
甚至是ELSE ''
。
看起来SQL Server不赞成您尝试在字符串连接中使用整数文字0
。这是否会或可能实际发生是另一个故事。重要的是,因为SQL Server将要求您使用字符串来连接字符串 - 即使无法实现连接的理论路径。
试试这个:
,CASE WHEN
sq.Total_Sales > 0 THEN
CAST(ROUND(CAST(sq.Total_Sales AS FLOAT) / (SUM(pfm.C1)) * 100,0) AS varchar(10)) + '%'
ELSE '0'
END AS Conversion_Rate