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

SQL技术需求:按Project分组并对Detail、Supervisor列去重拼接

解决按Project分组并拼接去重字段的问题

嘿,我明白你的困扰了——要按Project分组,同时把Detail和Supervisor的去重值拼接起来,直接用LISTAGG的时候总因为分组逻辑卡壳对吧?别担心,这里有两种靠谱的解决方案,你可以根据实际需求选择:

方案1:直接在LISTAGG中使用DISTINCT(Oracle 12c+适用)

如果你的需求是分别对Detail和Supervisor字段单独去重(比如同一个Project下,不管Detail对应哪个Supervisor,只要Detail重复就只保留一次),Oracle 12c及以后的版本支持在LISTAGG里直接加DISTINCT关键字,不用额外子查询就能搞定:

SELECT 
    Project,
    -- 拼接去重后的Detail,用逗号分隔,按Detail排序
    LISTAGG(DISTINCT Detail, ', ') WITHIN GROUP (ORDER BY Detail) AS Unique_Details,
    -- 拼接去重后的Supervisor,同理
    LISTAGG(DISTINCT Supervisor, ', ') WITHIN GROUP (ORDER BY Supervisor) AS Unique_Supervisors
FROM your_table_name  -- 替换成你的实际表名
GROUP BY Project;

方案2:先子查询去重组合,再拼接

如果你的需求是去重Detail和Supervisor的组合对(比如同一个Project下,只有当Detail和Supervisor都重复时才去重,保留不同的配对关系),那先通过子查询筛选出唯一的(Project, Detail, Supervisor)组合,再进行分组拼接:

SELECT 
    Project,
    LISTAGG(Detail, ', ') WITHIN GROUP (ORDER BY Detail) AS Unique_Detail_Supervisor_Pairs,
    -- 如果需要单独拼接Supervisor,也可以在这里添加对应逻辑
    LISTAGG(Supervisor, ', ') WITHIN GROUP (ORDER BY Supervisor) AS Unique_Supervisors
FROM (
    -- 先获取所有唯一的Project、Detail、Supervisor组合
    SELECT DISTINCT Project, Detail, Supervisor
    FROM your_table_name  -- 替换成你的实际表名
) deduplicated_data
GROUP BY Project;

额外提示

  • 记得把代码里的your_table_name替换成你实际使用的表名;
  • 可以自由调整分隔符(比如把, 换成; )和排序字段,匹配你的输出需求;
  • 如果是其他数据库(比如PostgreSQL用STRING_AGG、MySQL用GROUP_CONCAT),核心逻辑一致,只是函数名不同——比如PostgreSQL可以用STRING_AGG(DISTINCT Detail, ', ') ORDER BY Detail实现类似效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:14:15