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

SQL Server中用STUFF实现同表两列逗号分隔值的交集查询

SQL Server 逗号分隔字段交集计算方案

实现逻辑

核心流程分三步:

  • 拆分每行pertinent、procedure字段的逗号分隔字符串为独立编码行
  • 内关联合并两个拆分后的编码集,筛选出相等的公共编码,即为两列的交集
  • 借助STUFF函数配合FOR XML PATH将公共编码重新拼接为逗号分隔字符串,无匹配值时自动返回NULL

注意:procedure是SQL Server保留关键字,写查询时需要用方括号[]包裹避免语法错误

可直接运行的完整代码

-- 1. 构建测试表插入示例数据
CREATE TABLE #TmpData (
    id INT,
    pertinent VARCHAR(MAX),
    [procedure] VARCHAR(MAX)
);
INSERT INTO #TmpData
VALUES
(1, '13271,13272,513008,513009', '13200,13271,19353,21101,21105,21140'),
(2, '18236', '18235,19290,19749,21102,21105,21140');

-- 2. 核心查询计算交集
SELECT
    id,
    pertinent,
    [procedure],
    STUFF(
        (
            SELECT ',' + p.value
            FROM STRING_SPLIT(pertinent, ',') p
                INNER JOIN STRING_SPLIT([procedure], ',') pr
                    ON p.value = pr.value
            FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)'),
        1,
        1,
        ''
    ) AS [procedures pertinents]
FROM #TmpData;

运行结果

idpertinentprocedureprocedures pertinents
113271,13272,513008,51300913200,13271,19353,21101,21105,2114013271
21823618235,19290,19749,21102,21105,21140NULL

兼容性说明

如果使用SQL Server 2016以下版本,内置STRING_SPLIT函数不可用,可自定义字符串拆分表值函数替换即可,STUFF拼接交集的核心逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:06:33