SQL Case When语句求助:选法国时无法返回FR20、FR40
问题分析与解决方案
你的SQL语句确实存在语法问题,核心原因是:
CASE属于行级标量表达式,要求每个分支必须返回单个值(一行一列),但你在THEN分支里嵌套的子查询返回了两行数据,违反了SQL对CASE表达式的语法规则,会触发“子查询返回多于一行”的错误。
正确写法
要实现“当Country为'France'时返回FR20和FR40两个ID”的需求,无需使用CASE,直接通过条件过滤结合行构造即可:
写法一:拆分查询+条件过滤
SELECT 'FR20' AS ID WHERE ${Country} = 'France' UNION ALL SELECT 'FR40' AS ID WHERE ${Country} = 'France'
写法二:先构造数据集再过滤
SELECT ID FROM ( SELECT 'FR20' AS ID UNION ALL SELECT 'FR40' AS ID ) AS temp_ids WHERE ${Country} = 'France'
如果需要在${Country}不等于'France'时返回特定值,可以在数据集里补充对应行并添加条件判断。
内容的提问来源于stack exchange,提问作者Rajat
相关产品推荐
相关产品推荐

