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

SQL Server中用split_string拆分dataaddress关联表生成地址名的问题

解决SQL Server中ID组合字段转名称拼接的问题

先给出具体表结构与示例数据,方便对照理解:

示例表结构与数据

t1表(ID-名称映射表)

idname
1北京市
2朝阳区
3某某街道
4海淀区

t2表(存储ID组合字段)

t2_iddataaddress
11,2,3
22,4
31,3

实现需求的SQL语句

SELECT
    t2.t2_id,
    t2.dataaddress,
    STRING_AGG(t1.name, ' > ') AS addressname
FROM t2
CROSS APPLY STRING_SPLIT(t2.dataaddress, ',') AS split_ids
LEFT JOIN t1 ON t1.id = split_ids.value
GROUP BY t2.t2_id, t2.dataaddress
ORDER BY t2.t2_id;

执行结果

t2_iddataaddressaddressname
11,2,3北京市 > 朝阳区 > 某某街道
22,4朝阳区 > 海淀区
31,3北京市 > 某某街道

关键逻辑说明

  • CROSS APPLY STRING_SPLIT:将t2.dataaddress按逗号拆分为多行,每行对应一个独立ID值
  • LEFT JOIN t1:关联映射表获取每个ID对应的名称(若ID在t1中不存在会返回NULL,可替换为INNER JOIN过滤无效ID)
  • STRING_AGG:按t2.t2_id分组,用指定分隔符(示例用>)拼接所有关联到的名称,生成最终地址字符串

特殊场景处理

如果需要过滤掉t1中不存在的无效ID,只需把LEFT JOIN改为INNER JOIN:

SELECT
    t2.t2_id,
    t2.dataaddress,
    STRING_AGG(t1.name, ' > ') AS addressname
FROM t2
CROSS APPLY STRING_SPLIT(t2.dataaddress, ',') AS split_ids
INNER JOIN t1 ON t1.id = split_ids.value
GROUP BY t2.t2_id, t2.dataaddress
ORDER BY t2.t2_id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:50:43