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

求助:基于OrganisationId等条件合并SQL Server行的单SQL查询实现

可以通过单个SQL查询实现需求

完全可以通过单个SQL查询实现你的需求,核心思路是按OrganisationId、start date、end date分组,对每组内的其他列进行聚合处理(比如字符串拼接、数值求和等,根据你的实际列类型选择)。

方案1:SQL Server 2017及以上版本(推荐)

使用STRING_AGG函数直接拼接同组内的列值,语法简洁高效:

假设你的表名为YourTable,需要合并的其他列是Column1、Column2,示例查询如下:

SELECT
    OrganisationId,
    [start date],
    [end date],
    -- 用逗号拼接同组内的Column1值,可自定义分隔符
    STRING_AGG(Column1, ', ') AS MergedColumn1,
    STRING_AGG(Column2, ', ') AS MergedColumn2
FROM YourTable
-- 按指定三列分组
GROUP BY OrganisationId, [start date], [end date]

方案2:SQL Server 2016及以下版本

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

SELECT
    t.OrganisationId,
    t.[start date],
    t.[end date],
    -- 拼接Column1
    STUFF((
        SELECT ', ' + Column1
        FROM YourTable
        WHERE OrganisationId = t.OrganisationId
          AND [start date] = t.[start date]
          AND [end date] = t.[end date]
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS MergedColumn1,
    -- 拼接Column2
    STUFF((
        SELECT ', ' + Column2
        FROM YourTable
        WHERE OrganisationId = t.OrganisationId
          AND [start date] = t.[start date]
          AND [end date] = t.[end date]
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS MergedColumn2
FROM YourTable t
GROUP BY t.OrganisationId, t.[start date], t.[end date]

注意事项

  • 如果分组后某些列的值是唯一的(比如同组内Status列全部相同),可以直接用MAX(Status)或MIN(Status)来获取该值,无需拼接。
  • 若你需要保留原始行的所有细节但仅在组内合并展示,可根据实际需求调整聚合逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:50:25