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

如何在Oracle SQL中实现累计列值打印与全量拼接输出?

用SQL实现两种字符串聚合需求

原始数据集

假设数据存储在表test_table中,结构与数据如下:

SELECT col1, col2 FROM test_table;
-- 输出结果
col1 | col2
-----|-----
A    | 1
B    | 2
C    | 3
D    | 4

需求1:逐行累积拼接字符串

目标输出

A 1 A1
B 2 A1,B2
C 3 A1,B2,C3
D 4 A1,B2,C3,D4

SQL实现(主流数据库示例)

MySQL 8.0+

利用窗口函数版GROUP_CONCAT实现累积拼接:

SELECT
  col1,
  col2,
  GROUP_CONCAT(CONCAT(col1, col2) ORDER BY col1 SEPARATOR ',') OVER (ORDER BY col1) AS concat_result
FROM test_table;

PostgreSQL

使用窗口化的STRING_AGG函数:

SELECT
  col1,
  col2,
  STRING_AGG(CONCAT(col1, col2), ',' ORDER BY col1) OVER (ORDER BY col1) AS concat_result
FROM test_table;

SQL Server

通过FOR XML PATH结合子查询实现累积拼接:

SELECT
  t1.col1,
  t1.col2,
  STUFF(
    (SELECT ',' + CONCAT(t2.col1, t2.col2)
     FROM test_table t2
     WHERE t2.col1 <= t1.col1
     ORDER BY t2.col1
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
    1, 1, ''
  ) AS concat_result
FROM test_table t1
ORDER BY t1.col1;

需求2:全局统一拼接字符串

目标输出

A 1 A1,B2,C3,D4
B 2 A1,B2,C3,D4
C 3 A1,B2,C3,D4
D 4 A1,B2,C3,D4

SQL实现(通用方案)

先全局聚合得到完整拼接字符串,再与原表关联返回每行数据:

MySQL

SELECT
  t.col1,
  t.col2,
  global_concat.concat_result
FROM test_table t
CROSS JOIN (
  SELECT GROUP_CONCAT(CONCAT(col1, col2) ORDER BY col1 SEPARATOR ',') AS concat_result
  FROM test_table
) global_concat;

PostgreSQL

SELECT
  t.col1,
  t.col2,
  global_concat.concat_result
FROM test_table t
CROSS JOIN (
  SELECT STRING_AGG(CONCAT(col1, col2), ',' ORDER BY col1) AS concat_result
  FROM test_table
) global_concat;

SQL Server

SELECT
  t.col1,
  t.col2,
  global_concat.concat_result
FROM test_table t
CROSS JOIN (
  SELECT STUFF(
    (SELECT ',' + CONCAT(col1, col2)
     FROM test_table
     ORDER BY col1
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
    1, 1, ''
  ) AS concat_result
) global_concat;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:42:36