如何在SQL CASE语句中用CAST解决NULL转字符串的类型冲突问题?
问题分析与修正
你的核心问题有两个:
- CASE语句语法错误:ELSE分支不能嵌套额外的
THEN逻辑,原代码里的ELSE CAST(AVG(b.bedrag) AS varchar) IS NULL THEN 0完全不符合CASE的语法规则。 - 数据类型不匹配:要返回字符串
'geen boetes',CASE的所有分支必须统一返回字符串类型——你之前的代码里,有值时返回数值类型,NULL时想返回字符串,这会导致类型冲突。
修正后的SQL代码
SELECT s.naam, CASE WHEN AVG(b.bedrag) IS NOT NULL THEN CAST(ROUND(AVG(b.bedrag), 2) AS VARCHAR) ELSE 'geen boetes' END as gemiddelde FROM spelers s LEFT OUTER JOIN boetes b ON s.spelersnr = b.spelersnr GROUP BY s.naam ORDER BY s.naam
关键说明
- 当
AVG(b.bedrag)有值时,先通过ROUND保留两位小数,再用CAST把数值转换成字符串类型,确保和ELSE分支的返回类型一致。 - 当
AVG(b.bedrag)为NULL时,直接返回字符串'geen boetes',完美替换NULL值。
内容的提问来源于stack exchange,提问作者jarne2703
相关产品推荐
相关产品推荐

