如何将查询生成的格式化表结构同步至原AdjustedProductionByMonth表
如何将原表调整为查询结果的结构
由于原表是行式存储(每条记录对应一个Type的Dollars值),而目标是转成列式汇总结构,直接修改原表结构无法实现,需要通过重新生成表的方式完成,以下是两种可行方案:
方案一:备份后替换原表
- 先备份原表数据(务必执行,防止数据丢失):
SELECT * INTO [Portfolio Project].dbo.AdjustedProductionByMonth_Backup FROM [Portfolio Project].dbo.AdjustedProductionByMonth;
- 删除原表:
DROP TABLE [Portfolio Project].dbo.AdjustedProductionByMonth;
- 用目标查询生成新表:
SELECT MonthStandard , SUM(CASE WHEN Type = 'Gross Production' THEN Dollars END) AS GrossProduction , SUM(CASE WHEN Type = 'Adjustments' THEN Dollars END) AS Adjustments , SUM(CASE WHEN Type = 'Write-Offs' THEN Dollars END) AS WriteOffs , SUM(CASE WHEN Type = 'Adjusted Production' THEN Dollars END) AS AdjustedProduction INTO [Portfolio Project].dbo.AdjustedProductionByMonth FROM [Portfolio Project].dbo.AdjustedProductionByMonth_Backup GROUP BY MonthStandard;
方案二:重命名原表后创建新表
如果不想删除原表,可先将其重命名为历史表,再创建新表:
- 重命名原表:
EXEC sp_rename '[Portfolio Project].dbo.AdjustedProductionByMonth', 'AdjustedProductionByMonth_Old';
- 生成目标结构的新表:
SELECT MonthStandard , SUM(CASE WHEN Type = 'Gross Production' THEN Dollars END) AS GrossProduction , SUM(CASE WHEN Type = 'Adjustments' THEN Dollars END) AS Adjustments , SUM(CASE WHEN Type = 'Write-Offs' THEN Dollars END) AS WriteOffs , SUM(CASE WHEN Type = 'Adjusted Production' THEN Dollars END) AS AdjustedProduction INTO [Portfolio Project].dbo.AdjustedProductionByMonth FROM [Portfolio Project].dbo.AdjustedProductionByMonth_Old GROUP BY MonthStandard;
注意事项
- 原表的索引、约束、触发器等不会自动迁移到新表,若有需要需手动重新创建。
- 后续插入数据时,需调整插入逻辑,适配新的宽表结构(不再插入
Type和Dollars,而是直接填充各汇总列)。
内容的提问来源于stack exchange,提问作者LiaKap
相关产品推荐
相关产品推荐

