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

如何在Oracle SQL中实现阶梯拼接姓名的pattern输出

实现思路

你需要将LISTAGG作为窗口函数使用,指定窗口范围为「第一行到当前行」,即可实现逐行累积拼接的效果。

通用写法(支持LISTAGG窗口函数的数据库,如Oracle 12c+、PostgreSQL14+、DB2等)

数据库表本身的存储顺序不被默认保证,我们先按name升序明确排序规则(和你给出的A/B/C/D顺序一致),窗口范围限定为从首行到当前行,分隔符设为空字符串:

SELECT LISTAGG(name, '') WITHIN GROUP (ORDER BY name)
       OVER (ORDER BY name ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS concat_res
  FROM emp
 ORDER BY name;

执行后输出结果和你预期完全一致:

concat_res
A
AB
ABC
ABCD

MySQL 8.0+ 兼容写法

如果是MySQL环境,不支持LISTAGG作为窗口函数,可以用排序后自关联+GROUP_CONCAT实现:

WITH emp_with_rn AS (
    -- 先给每行按顺序加行号
    SELECT name, ROW_NUMBER() OVER (ORDER BY name) AS rn
      FROM emp
)
SELECT GROUP_CONCAT(t2.name ORDER BY t2.rn SEPARATOR '') AS concat_res
  FROM emp_with_rn t1
  INNER JOIN emp_with_rn t2 ON t2.rn <= t1.rn
 GROUP BY t1.rn
 ORDER BY t1.rn;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03