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

SQL Server 2014查询编写求助:合并唯一ID行值为单行(值为1)

解决SQL Server 2014中合并唯一ID行并保留值为1的内容

嘿,我来帮你搞定这个SQL查询问题!根据你的描述,核心需求是把相同唯一ID对应的多行数据合并成单行,并且只保留那些值为1的内容(因为行值只有0或1)。我分两种最常见的场景给你解决方案:

场景1:同一ID有多行,每行对应不同列的0/1值,合并后保留各列的1

假设你的原始表结构是这样的(比如有ID列和多个属性列,每行对应ID的一个属性状态):

IDColAColBColC
1100
1010
2001

你想要合并后每个ID一行,每个属性列只要有过1就保留1,否则是0。这种情况直接用MAX()聚合函数就可以,因为1比0大,同一ID下取最大值就能保留1的状态:

SELECT 
    ID,
    MAX(ColA) AS ColA,
    MAX(ColB) AS ColB,
    MAX(ColC) AS ColC
-- 如果还有更多列,继续添加MAX(列名)即可
FROM YourTableName
GROUP BY ID;

执行后就能得到预期结果:

IDColAColBColC
1110
2001

场景2:同一ID有多行,每行是属性名+0/1值,合并后把值为1的属性名拼接成字符串

如果你的表结构是这样的(每行是ID对应的一个属性及其状态):

IDAttributeValue
1ColA1
1ColB1
1ColC0
2ColC1

你想要合并后每个ID一行,把所有值为1的属性名用逗号拼接起来,SQL Server 2014可以用FOR XML PATH来实现字符串拼接:

SELECT 
    t.ID,
    STUFF(
        (SELECT ', ' + s.Attribute
         FROM YourTableName s
         WHERE s.ID = t.ID AND s.Value = 1
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
        1, 2, ''
    ) AS Attributes
FROM YourTableName t
GROUP BY t.ID;

STUFF函数是用来去掉拼接后开头多余的, ,执行结果如下:

IDAttributes
1ColA, ColB
2ColC

如果你的表结构和上面两种都不一样,可以补充下具体的表结构和示例数据,我再帮你调整方案!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:01:31