SQL如何将同Id下分散在多行的各列值合并为单条唯一记录
合并同ID多行列值的实现方案
方案1:仅查询合并结果(不修改原表)
SQL的聚合函数会自动忽略NULL值,你当前场景下同ID每个列仅存在一个非空值,直接用MAX/MIN按ID分组查询即可拿到完整合并结果:
SELECT Id, MAX(row1) AS row1, MAX(row2) AS row2, MAX(row3) AS row3 FROM dbo.Examples GROUP BY Id
执行后即可得到你需要的(1, 'Value1', 'Value1', 28)的查询结果。
方案2:清理原表数据,落地合并结果并加主键约束
如果需要将原表数据修改为合并后的状态,同时正式生效Id主键约束,按以下步骤操作:
- 第一步:将合并后的数据存入临时表备份
SELECT Id, MAX(row1) AS row1, MAX(row2) AS row2, MAX(row3) AS row3 INTO #TempMergedExamples FROM dbo.Examples GROUP BY Id
- 第二步:清空原表所有旧数据
TRUNCATE TABLE dbo.Examples
- 第三步:将合并后的干净数据插回原表
INSERT INTO dbo.Examples (Id, row1, row2, row3) SELECT Id, row1, row2, row3 FROM #TempMergedExamples
- 第四步:为Id列添加主键约束,保证后续写入数据时Id全局唯一
ALTER TABLE dbo.Examples ADD CONSTRAINT PK_Examples_Id PRIMARY KEY CLUSTERED (Id)
内容的提问来源于stack exchange,提问作者matt_vice89
相关产品推荐
相关产品推荐

