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

SQL查询:同组TAS_FNAME以/分隔合并并按指定格式显示

合并同组TAS_FNAME并保留原始行格式

当前查询结果(表1)

Requisition_numberper_idper_nameJob_titleInterviewTAS_EMAIL_ADDRESSTAS_FNAME
220211097ChadManagerThis is a commentabc.g@gmail.COMabc
220211097ChadManagerThis is a commentxyz.g@gmail.COMxyz

期望输出格式

Requisition_numberper_idper_nameJob_titleInterviewTAS_EMAIL_ADDRESSTAS_FNAME
220211097ChadManagerThis is a commentabc.g@gmail.COMabc/xyz
220211097ChadManagerThis is a commentxyz.g@gmail.COM

需求说明

当Requisition_number和per_id相同,且除TAS_EMAIL_ADDRESS外其他列均一致时,将该组所有TAS_FNAME以/分隔拼接,仅在组内第一行显示拼接结果,其余行TAS_FNAME留空。

尝试过的方法及问题

  1. 使用xmlagg表达式:
rtrim (xmlagg (xmlelement(e,tas_fname||'/')).extract ('//text()'), '/') AS tas_fname

结果未生效,输出仍与表1一致——原因是未对分组字段做聚合处理,直接使用无法合并同组数据。

  1. 使用listagg函数搭配within group (order by)时出现语法错误,大概率是语法格式不正确(比如未指定分组字段、order by子句格式错误)。

解决方案

可以通过窗口函数先计算同组的拼接结果,再用行号控制仅第一行显示拼接值,其余行留空。以下是不同数据库的适配示例:

Oracle数据库适配SQL

SELECT 
    Requisition_number,
    per_id,
    per_name,
    Job_title,
    Interview,
    TAS_EMAIL_ADDRESS,
    CASE 
        WHEN row_number() OVER (PARTITION BY Requisition_number, per_id, per_name, Job_title, Interview ORDER BY TAS_EMAIL_ADDRESS) = 1 
        THEN listagg(TAS_FNAME, '/') WITHIN GROUP (ORDER BY TAS_FNAME) OVER (PARTITION BY Requisition_number, per_id, per_name, Job_title, Interview)
        ELSE '' 
    END AS TAS_FNAME
FROM 
    你的表名;

PostgreSQL数据库适配SQL

SELECT 
    Requisition_number,
    per_id,
    per_name,
    Job_title,
    Interview,
    TAS_EMAIL_ADDRESS,
    CASE 
        WHEN row_number() OVER (PARTITION BY Requisition_number, per_id, per_name, Job_title, Interview ORDER BY TAS_EMAIL_ADDRESS) = 1 
        THEN string_agg(TAS_FNAME, '/' ORDER BY TAS_FNAME) OVER (PARTITION BY Requisition_number, per_id, per_name, Job_title, Interview)
        ELSE '' 
    END AS TAS_FNAME
FROM 
    你的表名;

代码说明

  • PARTITION BY子句:按照需求中的分组条件划分组,确保只有指定字段完全相同的行才会被归为一组。
  • 聚合函数(listagg/string_agg):以窗口函数形式计算每组内所有TAS_FNAME的拼接结果。
  • row_number()函数:标记组内的第一行,仅在该行显示拼接后的结果,其余行通过ELSE ''设置为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:24:21