SQL Server 2014查询编写求助:合并唯一ID行值为单行(值为1)
解决SQL Server 2014中合并唯一ID行并保留值为1的内容
嘿,我来帮你搞定这个SQL查询问题!根据你的描述,核心需求是把相同唯一ID对应的多行数据合并成单行,并且只保留那些值为1的内容(因为行值只有0或1)。我分两种最常见的场景给你解决方案:
场景1:同一ID有多行,每行对应不同列的0/1值,合并后保留各列的1
假设你的原始表结构是这样的(比如有ID列和多个属性列,每行对应ID的一个属性状态):
| ID | ColA | ColB | ColC |
|---|---|---|---|
| 1 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 |
| 2 | 0 | 0 | 1 |
你想要合并后每个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;
执行后就能得到预期结果:
| ID | ColA | ColB | ColC |
|---|---|---|---|
| 1 | 1 | 1 | 0 |
| 2 | 0 | 0 | 1 |
场景2:同一ID有多行,每行是属性名+0/1值,合并后把值为1的属性名拼接成字符串
如果你的表结构是这样的(每行是ID对应的一个属性及其状态):
| ID | Attribute | Value |
|---|---|---|
| 1 | ColA | 1 |
| 1 | ColB | 1 |
| 1 | ColC | 0 |
| 2 | ColC | 1 |
你想要合并后每个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函数是用来去掉拼接后开头多余的, ,执行结果如下:
| ID | Attributes |
|---|---|
| 1 | ColA, ColB |
| 2 | ColC |
如果你的表结构和上面两种都不一样,可以补充下具体的表结构和示例数据,我再帮你调整方案!
内容的提问来源于stack exchange,提问作者User_1191
相关产品推荐
相关产品推荐

