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

多Product ID同列时替换为产品名称并保留逗号分隔格式的SQL查询需求

解决方案:将逗号分隔的Product ID转换为Product Name并重新聚合

没问题,既然你已经用cross_apply实现了拆分行的结构,那只需要在这个基础上重新聚合字符串就能得到客户需要的格式了。不同SQL方言的聚合函数略有不同,下面给你分数据库说明:

1. SQL Server 版本

SQL Server 2017及以上支持STRING_AGG函数,完美适配这个场景:

CREATE VIEW CustomerProducts AS
SELECT
    c.[Customer ID],
    STRING_AGG(p.[Product Name], ',') AS Products
FROM
    Customer c
CROSS APPLY
    STRING_SPLIT(c.[Product ID], ',') AS split
JOIN
    Product p ON split.value = p.[Product ID]
GROUP BY
    c.[Customer ID];

关键说明:

  • STRING_SPLIT会把逗号分隔的Product ID拆成单独行(和你之前用cross_apply的效果一致)
  • 通过JOIN关联Product表,匹配对应的Product Name
  • STRING_AGG按Customer ID分组,把多个Product Name用逗号重新拼接成一个字符串

2. MySQL 版本

MySQL用GROUP_CONCAT函数实现类似效果:

CREATE VIEW CustomerProducts AS
SELECT
    c.`Customer ID`,
    GROUP_CONCAT(p.`Product Name` SEPARATOR ',') AS Products
FROM
    Customer c
JOIN
    Product p ON FIND_IN_SET(p.`Product ID`, c.`Product ID`) > 0
GROUP BY
    c.`Customer ID`;

如果你的MySQL是8.0及以上版本,也可以先拆分再聚合(和SQL Server逻辑更一致):

CREATE VIEW CustomerProducts AS
SELECT
    c.`Customer ID`,
    GROUP_CONCAT(p.`Product Name` SEPARATOR ',') AS Products
FROM
    Customer c
CROSS JOIN
    STRING_SPLIT(c.`Product ID`, ',') AS split
JOIN
    Product p ON split.value = p.`Product ID`
GROUP BY
    c.`Customer ID`;

3. Oracle 版本

Oracle使用LISTAGG函数来完成字符串聚合:

CREATE VIEW CustomerProducts AS
SELECT
    c."Customer ID",
    LISTAGG(p."Product Name", ',') WITHIN GROUP (ORDER BY p."Product ID") AS Products
FROM
    Customer c,
    TABLE(STRING_TO_TABLE(c."Product ID", ',')) AS split
JOIN
    Product p ON split.column_value = p."Product ID"
GROUP BY
    c."Customer ID";

额外提醒:

  • 如果Product ID是数值类型,拆分后记得做类型转换,避免关联时出现类型不匹配错误
  • 如果存在Customer表中Product ID在Product表中找不到的情况,可以把JOIN换成LEFT JOIN,并用COALESCE(p.[Product Name], 'Unknown')替换NULL值,避免最终结果缺失内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:28:12