SQL select的case语句如何返回多列避免重复别名自动加后缀
你出现别名后缀的核心原因是:SELECT 子句中每一个独立的表达式都会被识别为单独的一列,你为FIR/SEC/THI分别写了3个重复别名的CASE表达式,数据库会默认追加后缀区分多列,不会自动合并逻辑。
正确的写法是每一个输出列对应一个独立的CASE表达式,把该列的所有判断分支都整合到同一个CASE内,调整后的SQL如下:
select distinct Layout, case when Layout = 'Midd' then 'mid' when Layout = 'Ser' then null when Layout = 'Cloud' then ser end as FIR, case when Layout = 'Midd' then 'mid' when Layout = 'Ser' then null when Layout = 'Cloud' then mid end as SEC, case when Layout = 'Midd' then 'mid' when Layout = 'Ser' then null when Layout = 'Cloud' then clo end as THI from SUMMARY
上述逻辑完全匹配你的需求:
- Layout为
Midd时,三个列都返回mid - Layout为
Ser时,三个列都返回null - Layout为
Cloud时,三个列分别返回对应字段的值
如果你的表中还有其他Layout取值,可在每个CASE末尾加else null兜底(默认无匹配时CASE也会返回null,可不加)。
内容的提问来源于stack exchange,提问作者menphis
相关产品推荐
相关产品推荐

