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

如何在T-SQL中将同一UgovorId的多个Naziv合并为字符串显示?

合并同一UgovorId对应的多个Naziv为字符串的SQL解决方案

嘿,我明白你的需求了——你现在的查询能返回部分结果,但同一个vup.UgovorId对应多条p.Naziv记录,你想把这些Naziv合并成一个字符串,让每个UgovorId只显示一行对吧?这在SQL里用字符串聚合函数就能轻松实现,不同数据库的语法略有不同,我给你整理几种常见场景的写法:

MySQL/MariaDB

用GROUP_CONCAT函数来聚合字符串,还可以自定义分隔符(默认是逗号):

SELECT 
    vup.UgovorId,
    GROUP_CONCAT(p.Naziv SEPARATOR ', ') AS 合并的Naziv
FROM 
    你的vup表名 vup
JOIN 
    你的p表名 p ON vup.关联字段 = p.关联字段
GROUP BY 
    vup.UgovorId;

如果需要去重,还能加上DISTINCT:GROUP_CONCAT(DISTINCT p.Naziv SEPARATOR ', ')

SQL Server(2017及以上版本)

SQL Server 2017之后支持STRING_AGG函数,用法更简洁直观:

SELECT 
    vup.UgovorId,
    STRING_AGG(p.Naziv, ', ') AS 合并的Naziv
FROM 
    你的vup表名 vup
JOIN 
    你的p表名 p ON vup.关联字段 = p.关联字段
GROUP BY 
    vup.UgovorId;

要是想给聚合后的字符串排序,就用WITHIN GROUP:

STRING_AGG(p.Naziv, ', ') WITHIN GROUP (ORDER BY p.Naziv) AS 合并的Naziv

PostgreSQL

PostgreSQL同样支持STRING_AGG函数,用法和SQL Server基本一致:

SELECT 
    vup.UgovorId,
    STRING_AGG(p.Naziv, ', ') AS 合并的Naziv
FROM 
    你的vup表名 vup
JOIN 
    你的p表名 p ON vup.关联字段 = p.关联字段
GROUP BY 
    vup.UgovorId;

排序的话直接在函数后加ORDER BY:STRING_AGG(p.Naziv, ', ') ORDER BY p.Naziv

Oracle(11g R2及以上版本)

Oracle用LISTAGG函数,必须指定排序规则:

SELECT 
    vup.UgovorId,
    LISTAGG(p.Naziv, ', ') WITHIN GROUP (ORDER BY p.Naziv) AS 合并的Naziv
FROM 
    你的vup表名 vup
JOIN 
    你的p表名 p ON vup.关联字段 = p.关联字段
GROUP BY 
    vup.UgovorId;

小提醒

记得把示例里的你的vup表名、你的p表名和关联字段,替换成你实际的表名和关联逻辑(比如外键匹配的字段)。如果你的数据库版本比较旧,可能需要用自定义函数或者XML拼接这类替代方案,但上面的写法已经覆盖了绝大多数主流数据库的新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:47