如何在FetchXML中将PWD_Company关联的PWD_WARE值合并展示?
实现同一公司对应WARE值的逗号分隔合并
完全可以实现,不同SQL数据库有对应的字符串聚合函数,以下是主流数据库的具体实现示例:
MySQL/MariaDB
使用GROUP_CONCAT()函数配合分组即可:
SELECT c.company_name, -- 假设PWD_Company表的公司名字段为company_name GROUP_CONCAT(w.ware_value SEPARATOR ',') AS ware_list FROM PWD_Company c LEFT JOIN PWD_WARE w ON c.company_id = w.company_id -- 假设两表关联字段为company_id GROUP BY c.company_name, c.company_id; -- 建议同时按主键分组,避免同名公司数据混淆
PostgreSQL
使用STRING_AGG()函数,还可按需排序合并后的WARE值:
SELECT c.company_name, STRING_AGG(w.ware_value, ',' ORDER BY w.ware_value) AS ware_list FROM PWD_Company c LEFT JOIN PWD_WARE w ON c.company_id = w.company_id GROUP BY c.company_name, c.company_id;
SQL Server
2017及以上版本
直接使用STRING_AGG():
SELECT c.company_name, STRING_AGG(w.ware_value, ',') WITHIN GROUP (ORDER BY w.ware_value) AS ware_list FROM PWD_Company c LEFT JOIN PWD_WARE w ON c.company_id = w.company_id GROUP BY c.company_name, c.company_id;
低版本兼容写法
用FOR XML PATH拼接字符串:
SELECT c.company_name, STUFF(( SELECT ',' + w.ware_value FROM PWD_WARE w WHERE w.company_id = c.company_id FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS ware_list FROM PWD_Company c GROUP BY c.company_name, c.company_id;
Oracle
使用LISTAGG()函数:
SELECT c.company_name, LISTAGG(w.ware_value, ',') WITHIN GROUP (ORDER BY w.ware_value) AS ware_list FROM PWD_Company c LEFT JOIN PWD_WARE w ON c.company_id = w.company_id GROUP BY c.company_name, c.company_id;
注意:如果WARE字段可能存在NULL值,可通过COALESCE()函数过滤,例如GROUP_CONCAT(COALESCE(w.ware_value, '') SEPARATOR ','),避免合并结果中出现空值占位。
内容的提问来源于stack exchange,提问作者PerserPolis
相关产品推荐
相关产品推荐

