SQL Server:为第 1 列中的每个唯一值插入一个新行

Tim*_*Tim 4 sql-server insert insert-into sql-update

使用 SQL Server 我试图找到表的第 1 列中的每个唯一值,然后使用该唯一的第 1 列值插入一个新行并添加一个第 2 列值。第 2 列的值每次都相同。

注意:我可以通过从数据库中的第 1 列中提取唯一值并为每个值添加一个插入来完成此操作,但我在第 1 列中有 160 万个唯一值,因此以这种方式编写它会很烦人。

以第 1 列中的 2 个唯一值为例:

select *
from dbo.SettopSubscription
where MacAddr = '0000000ee4b5'
   or MacAddr = '0000003a9667'
Run Code Online (Sandbox Code Playgroud)

结果:

MacAddr      PackageId   
------------ ----------- 
0000000ee4b5    11
0000000ee4b5     3
0000003a9667   241
0000003a9667   241
0000003a9667    11
0000003a9667   211
0000003a9667     8
0000003a9667  4411
0000003a9667  4412
0000003a9667  4479
Run Code Online (Sandbox Code Playgroud)

现在我想将 PackageId = 37 添加到每个唯一的 MacAddr 值,但到目前为止还没有运气写一些东西来查找和添加唯一的值。如前所述,我可以通过为每个 MacAddr 编写插入到脚本中来轻松完成此操作,但这需要永远占用 160 万个 MacAddr 值。

开始视图,同上:

MacAddr      PackageId   
------------ ----------- 
0000000ee4b5    11
0000000ee4b5     3
0000003a9667   241
0000003a9667   241
0000003a9667    11
0000003a9667   211
0000003a9667     8
0000003a9667  4411
0000003a9667  4412
0000003a9667  4479
Run Code Online (Sandbox Code Playgroud)

最终结果:

MacAddr      PackageId   
------------ ----------- 
0000000ee4b5    11
0000000ee4b5     3
***0000000ee4b5    37***
0000003a9667   241
0000003a9667   241
0000003a9667    11
0000003a9667   211
0000003a9667     8
0000003a9667  4411
0000003a9667  4412
0000003a9667  4479
***0000003a9667    37***
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助。

gmi*_*ley 5

这将为每个不同的记录插入一条记录,MacAddr其中 a PackageIdof37还没有 a PackageIdof 37:

insert into SettopSubscription (MacAddr, PackageId)
select distinct s1.MacAddr, 37 
from SettopSubscription s1
where not exists
(
    select s2.PackageId
    from SettopSubscription s2
    where s2.MacAddr = s1.MacAddr
    and s2.PackageId = 37
);
Run Code Online (Sandbox Code Playgroud)