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

如何让SELECT CASE查询结果仅非最后一行追加逗号?

解决方法:用行号判断控制逗号拼接

核心思路是给每行标记序号和总行数,仅在非最后一行的结果末尾追加逗号,以下分两种场景给出实现代码:

主流数据库(MySQL 8.0+/PostgreSQL/SQL Server等)

直接用窗口函数生成行号与总行数,在逻辑中动态判断是否加逗号:

SELECT 
  CONCAT(
    -- 保留你原有的路径替换+文件名转大写逻辑
    CASE 
      WHEN name LIKE '%/a/%' THEN CONCAT(REPLACE(name, '/旧路径/a/', '/新路径/a2/'), UPPER(SUBSTRING_INDEX(name, '/', -1)))
      WHEN name LIKE '%/b/%' THEN CONCAT(REPLACE(name, '/旧路径/b/', '/新路径/b2/'), UPPER(SUBSTRING_INDEX(name, '/', -1)))
      -- 补全你其他的路径匹配规则
      ELSE name -- 处理不匹配的异常情况
    END,
    -- 新增逻辑:仅当前行不是最后一行时加逗号
    CASE WHEN row_num < total_rows THEN ',' ELSE '' END
  ) AS new_path
FROM (
  -- 子查询生成每行序号和结果集总行数
  SELECT 
    name,
    ROW_NUMBER() OVER(ORDER BY name) AS row_num, -- 排序字段可换成主键或业务需要的排序规则
    COUNT(*) OVER() AS total_rows
  FROM 你的表名
) AS temp;

低版本MySQL(5.x,不支持窗口函数)

用用户变量实现行号计数与总行数判断:

-- 先初始化变量
SET @row_count = 0;
SET @total = (SELECT COUNT(*) FROM 你的表名);

SELECT 
  CONCAT(
    -- 保留原有的路径替换+文件名转大写逻辑
    CASE 
      WHEN name LIKE '%/a/%' THEN CONCAT(REPLACE(name, '/旧路径/a/', '/新路径/a2/'), UPPER(SUBSTRING_INDEX(name, '/', -1)))
      WHEN name LIKE '%/b/%' THEN CONCAT(REPLACE(name, '/旧路径/b/', '/新路径/b2/'), UPPER(SUBSTRING_INDEX(name, '/', -1)))
      ELSE name
    END,
    -- 通过变量判断是否加逗号
    CASE WHEN @row_count := @row_count + 1 < @total THEN ',' ELSE '' END
  ) AS new_path
FROM 你的表名
ORDER BY name; -- 按需调整排序规则

关键注意点

  • 排序字段:ORDER BY name可替换为你的业务主键或其他排序字段,确保行顺序符合预期,避免最后一行判断错误
  • 路径替换部分:将示例中的旧路径/新路径替换为你实际使用的路径,保持原有CASE匹配规则不变即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:48:16