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

SQL Server:将逗号分隔字段替换为另一表的对应数据

逗号分隔爱好标识转名称的解决方案

针对people表中逗号分隔的爱好标识,要关联hobbies表替换为对应名称,可以通过拆分-关联-聚合的步骤实现,具体方案如下:

基础实现方案

适用于标识无空格、且所有标识都能在hobbies表找到匹配的场景:

SELECT 
    p.name,
    p.age,
    STRING_AGG(h.hobby, ', ') AS hobbies
FROM 
    people p
CROSS APPLY 
    STRING_SPLIT(p.hobbies, ',') s
JOIN 
    hobbies h ON TRIM(s.value) = h.identifier
GROUP BY 
    p.name, p.age

增强版(处理空值、无效标识)

如果存在爱好为空、或者标识在hobbies表不存在的情况,可以用以下SQL兼容这类场景:

SELECT 
    p.name,
    p.age,
    CASE 
        WHEN p.hobbies IS NULL OR p.hobbies = '' THEN '无爱好'
        ELSE STRING_AGG(ISNULL(h.hobby, '未知爱好'), ', ') 
    END AS hobbies
FROM 
    people p
LEFT CROSS APPLY 
    STRING_SPLIT(p.hobbies, ',') s
LEFT JOIN 
    hobbies h ON TRIM(s.value) = h.identifier
GROUP BY 
    p.name, p.age, p.hobbies

关键步骤说明

  1. 拆分字段:使用STRING_SPLIT(p.hobbies, ',')把逗号分隔的爱好标识拆分成多行记录,通过CROSS APPLY(或LEFT CROSS APPLY兼容空值)关联到原表。
  2. 关联匹配:通过TRIM(s.value)处理标识可能带有的空格,与hobbies表的identifier字段关联,获取对应的爱好名称。
  3. 聚合合并:使用STRING_AGG函数把多行的爱好名称重新合并为逗号分隔的字符串,按用户的name和age分组确保每个用户仅返回一行。
  4. 异常处理:通过CASE和ISNULL处理爱好为空、标识无效的情况,返回友好提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:52:17