【发布时间】:2020-07-31 22:23:10
【问题描述】:
基本上,我要做的是在源表中创建一个新的重复行,如果 CANID 作为目标表中的副本存在。例如,在这个集合中,CANID '2' 在目标表中作为副本存在,但在源表中,它只存在一次。我想要完成的是让这个脚本使用下一个可用的 CANID 创建另一行并复制其他列的值。
运行后,结果将如下所示。请注意如何更改目标表中的 CANID(对于 ACTID 6969)以反映正确的 CANID
源表:
CREATE TABLE [dbo].[sourcetable]
(
[CANID] [int] NULL,
[COLID] [int] NULL,
[Value1] [varchar](255) NULL,
[Value2] [varchar](255) NULL,
[Value3] [varchar](255) NULL,
[Value4] [varchar](255) NULL,
[Value5] [varchar](255) NULL
) ON [PRIMARY]
GO
Sourcetable 的示例数据
INSERT INTO sourcetable (CANID,COLID,Value1,Value2,Value3,Value4,Value5) VALUES (1,21,'0.25','6.25','Chicago','-0.25','16');
INSERT INTO sourcetable (CANID,COLID,Value1,Value2,Value3,Value4,Value5) VALUES (2,65,'0.65','6.19','Dallas','0.15','65');
INSERT INTO sourcetable (CANID,COLID,Value1,Value2,Value3,Value4,Value5) VALUES (3,91,'1.65','3.25','Denver','NULL','65');
INSERT INTO sourcetable (CANID,COLID,Value1,Value2,Value3,Value4,Value5) VALUES (4,55,'1','42','Miami','0.25','NULL');
目标表:
CREATE TABLE [dbo].targettable
(
[CANID] [int] NULL,
[ACCTID] [int] NULL,
) ON [PRIMARY]
GO
目标表的示例数据:
INSERT INTO targettable (CANID,ACCTID) VALUES ('1','6586');
INSERT INTO targettable (CANID,ACCTID) VALUES ('2','6658');
INSERT INTO targettable (CANID,ACCTID) VALUES ('2','6969');
INSERT INTO targettable (CANID,ACCTID) VALUES ('3','2245');
INSERT INTO targettable (CANID,ACCTID) VALUES ('4','2365');
我尝试了递归 CTE,但它不适合我。任何帮助将不胜感激。
SQL Server 2012。
【问题讨论】:
标签: sql sql-server sql-update sql-insert window-functions