You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL CASE语句中拼接多个字符串?SSMS语法报错求助

解决SQL CASE语句拼接多个结果的问题

你的代码存在两个核心问题:

  1. CASE语句逻辑互斥:原CASE是顺序判断,只会返回第一个满足条件的结果,无法同时匹配多个Reason值(比如同时包含R01和R04的情况),自然没法拼接多个结果。
  2. ||运算符使用错误:在SQL Server(SSMS对应的数据库)中,默认情况下||是逻辑或(OR),而非字符串拼接运算符;即使开启了拼接模式,你的写法里||前没有可拼接的左操作数,也会触发语法错误。

要实现同时匹配多个Reason值并拼接结果的需求,你需要把每个条件单独处理,再将所有符合条件的结果拼接起来。推荐用CONCAT函数(自动处理空值)或者+运算符(需手动处理NULL),示例如下:

方法1:使用CONCAT函数(推荐)

SELECT 
  CONCAT(
    CASE WHEN CHARINDEX('R01', l.Reason) > 0 THEN 'Result1' ELSE '' END,
    CASE WHEN CHARINDEX('R02', l.Reason) > 0 THEN ' Result2' ELSE '' END,
    CASE WHEN CHARINDEX('R03', l.Reason) > 0 THEN ' Result3' ELSE '' END,
    CASE WHEN CHARINDEX('R04', l.Reason) > 0 THEN ' Result4' ELSE '' END
  ) AS Reason
FROM totals y

方法2:使用+运算符

SELECT 
  ISNULL(CASE WHEN CHARINDEX('R01', l.Reason) > 0 THEN 'Result1' ELSE '' END, '') +
  ISNULL(CASE WHEN CHARINDEX('R02', l.Reason) > 0 THEN ' Result2' ELSE '' END, '') +
  ISNULL(CASE WHEN CHARINDEX('R03', l.Reason) > 0 THEN ' Result3' ELSE '' END, '') +
  ISNULL(CASE WHEN CHARINDEX('R04', l.Reason) > 0 THEN ' Result4' ELSE '' END, '') AS Reason
FROM totals y

补充说明

如果一定要用||作为拼接运算符,需要确保SQL Server的数据库兼容级别在110及以上,并且开启以下设置(不推荐,易受环境影响):

SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET CONCAT_NULL_YIELDS_NULL ON;

但还是建议用CONCAT或+,避免环境差异导致的问题。

内容的提问来源于stack exchange,提问作者MartMX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:25:12