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

如何在SQL Server中按标志列合并多行数据为单行?

问题描述

当前查询返回结果如下:

SomeID     SomeActions                  PendingFlag     CompletedFlag
101        SomeAction1, SomeAction2     1               0
101        OtherAction1, OtherAction2   0               1 

需要将结果转换为如下格式:

SomeID     SomeActionsPending           SomeActionsCompleted 
101        SomeAction1, SomeAction2     OtherAction1, OtherAction2

请问如何编写SQL Server查询,基于特定列标志将此类数据合并为单行?


解决方案

可以通过条件聚合 + GROUP BY实现需求,核心逻辑是按SomeID分组,通过条件判断提取对应状态的动作内容,再用聚合函数筛选出目标值:

场景1:每个SomeID对应状态仅一条记录

SELECT
    SomeID,
    MAX(CASE WHEN PendingFlag = 1 THEN SomeActions END) AS SomeActionsPending,
    MAX(CASE WHEN CompletedFlag = 1 THEN SomeActions END) AS SomeActionsCompleted
FROM
    YourTableName -- 替换为你的实际表名
GROUP BY
    SomeID;
  • GROUP BY SomeID:将同一SomeID的所有记录合并为一组
  • CASE WHEN:仅保留对应状态标志为1的SomeActions内容,其他记录此位置为NULL
  • MAX():在分组中筛选出非NULL的目标值(因为每个状态仅对应一条记录,MAX直接取到所需内容)

场景2:每个SomeID对应状态有多条记录,需合并动作内容

如果同一SomeID下同一状态存在多条记录,需要合并SomeActions,可以使用SQL Server 2017及以上版本支持的STRING_AGG函数:

SELECT
    SomeID,
    STRING_AGG(CASE WHEN PendingFlag = 1 THEN SomeActions END, ', ') AS SomeActionsPending,
    STRING_AGG(CASE WHEN CompletedFlag = 1 THEN SomeActions END, ', ') AS SomeActionsCompleted
FROM
    YourTableName -- 替换为你的实际表名
GROUP BY
    SomeID;

这个版本会将同一状态下的多个SomeActions用逗号分隔合并成一串文本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:07