如何基于唯一ID拼接SQL Server多行数据?现有脚本故障求助
SQL Server 按唯一ID拼接多行数据修正方案
你的原脚本存在两个核心问题:
- 子查询未关联外部临时表
#Transcripts的唯一ID,导致会拼接整个MyTableName表的所有Transcript内容,而非按单个ID分组处理 - 子查询与外部表无关联逻辑,无法匹配到对应ID的记录
以下是修正后的脚本,假设唯一ID列名为ID,请根据实际表结构替换:
方案1:拼接时去重重复的Transcript内容
SELECT t.ID, STUFF(( SELECT DISTINCT ', ' + CAST(mt.Transcript AS VARCHAR(MAX)) FROM MyTableName mt WHERE mt.ID = t.ID -- 关联当前ID,仅拼接该ID对应的记录 FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(MAX)'), 1, 2, '') AS Transcript_Combined FROM #Transcripts t GROUP BY t.ID;
方案2:保留所有对应记录的内容(不去重)
SELECT t.ID, STUFF(( SELECT ', ' + CAST(mt.Transcript AS VARCHAR(MAX)) FROM MyTableName mt WHERE mt.ID = t.ID FOR XML PATH(''), TYPE ).value('.', 'VARCHAR(MAX)'), 1, 2, '') AS Transcript_Combined FROM #Transcripts t GROUP BY t.ID;
关键说明
- 必须通过
WHERE mt.ID = t.ID建立子查询与外部表的关联,确保每个ID仅处理自身对应的Transcript数据 - 外部查询通过
GROUP BY t.ID保证每个唯一ID只输出一行合并结果 - 若你的唯一ID列名不是
ID,请将所有ID替换为实际列名 - 确认
MyTableName和#Transcripts中用于关联的字段逻辑一致
内容的提问来源于stack exchange,提问作者Arsee
相关产品推荐
相关产品推荐

