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

SQL Server:按列分组对应每个值的实现咨询

SQL Server按列分组汇总对应End值的解决方案

嘿,欢迎加入论坛呀!能看得出来你既想参与贡献又想解决自己的技术问题,这点超棒~针对你现在遇到的SQL Server按Start Step分组,汇总对应End 1和End 2所有非NULL值的需求,我给你整理了两个实用的方案,你可以根据自己的SQL Server版本来选:

方案一:使用STRING_AGG(推荐,SQL Server 2017及以上版本)

STRING_AGG是SQL Server 2017引入的原生聚合函数,能直接把多行值合并成指定分隔符的字符串,用法简单高效。我们可以先把End 1和End 2的非NULL值整合到同一列,再按Start Step分组聚合:

SELECT 
    [Start Step],
    STRING_AGG(EndValue, ', ') AS AllEndValues
FROM (
    -- 提取所有非NULL的End 1值
    SELECT 
        [Start Step],
        [End 1] AS EndValue
    FROM YourTableName
    WHERE [End 1] IS NOT NULL
    UNION ALL
    -- 提取所有非NULL的End 2值
    SELECT 
        [Start Step],
        [End 2] AS EndValue
    FROM YourTableName
    WHERE [End 2] IS NOT NULL
) AS CombinedEnds
GROUP BY [Start Step]
ORDER BY [Start Step];

代码说明:

  1. 内层子查询通过UNION ALL将End 1和End 2的非NULL值合并到一个临时结果集CombinedEnds中;
  2. 外层查询按Start Step分组,用STRING_AGG把每个分组的EndValue拼接成逗号分隔的字符串;
  3. 如果需要对结果去重(比如同一分组下有重复的End值),把UNION ALL改成UNION即可。

方案二:适用于SQL Server 2016及更早版本

如果你的SQL Server版本不支持STRING_AGG,可以用STUFF+FOR XML PATH的经典组合来实现字符串拼接:

SELECT 
    DISTINCT [Start Step],
    STUFF((
        SELECT ', ' + CAST(EndValue AS VARCHAR(MAX))
        FROM (
            SELECT [Start Step], [End 1] AS EndValue FROM YourTableName WHERE [End 1] IS NOT NULL
            UNION ALL
            SELECT [Start Step], [End 2] AS EndValue FROM YourTableName WHERE [End 2] IS NOT NULL
        ) AS CombinedEnds
        WHERE CombinedEnds.[Start Step] = t.[Start Step]
        FOR XML PATH(''), TYPE
    ).value('.', 'VARCHAR(MAX)'), 1, 2, '') AS AllEndValues
FROM YourTableName t
ORDER BY [Start Step];

代码说明:

  1. 同样先通过子查询合并End 1和End 2的非NULL值;
  2. FOR XML PATH('')会把每个分组的结果拼接成无标签的XML字符串;
  3. STUFF函数用来去掉字符串开头多余的, (从第1位开始,删除2个字符);
  4. .value('.', 'VARCHAR(MAX)')用来把XML类型转换为普通字符串。

记得把代码里的YourTableName替换成你实际使用的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:31