SQL 服务器:为第 1 列中的每个唯一值插入一个新行
SQL Server: Insert a new row for every unique value in column 1
使用 SQL 服务器 我试图在 table 的第 1 列中找到每个唯一值,然后使用该唯一的第 1 列值插入一个新行并添加第 2 列值。第 2 列的值每次都相同。
注意:我可以通过从第 1 列的数据库中提取唯一值并为每个添加一个插入来做到这一点,但我在第 1 列中有 160 万个唯一值,所以这样写会很烦人.
以第 1 列中的 2 个唯一值为例:
select *
from dbo.SettopSubscription
where MacAddr = '0000000ee4b5'
or MacAddr = '0000003a9667'
结果:
MacAddr PackageId
------------ -----------
0000000ee4b5 11
0000000ee4b5 3
0000003a9667 241
0000003a9667 241
0000003a9667 11
0000003a9667 211
0000003a9667 8
0000003a9667 4411
0000003a9667 4412
0000003a9667 4479
现在我想将 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
最终结果:
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***
感谢您提前的帮助。
试试这个:
insert into dbo.SettopSubscription (MacAddr,PackageId)
select MacAddr, 'your_PackageId_Value' from
(select count(dbo.SettopSubscription.MacAddr ) nbr, MacAddr from
dbo.SettopSubscription group by MacAddr ) tmp where tmp.nbr=1
到INSERT
一条新记录到SettopSubscription
table每个唯一值MacAddr
,与PackageId
的37
(如果 MacAddr
和 PackageId
的组合在 table 中已有记录,则不插入:
INSERT INTO SettopSubscription (MacAddr, PackageId)
SELECT DISTINCT s1.MacAddr, 37
FROM dbo.SettopSubscription s1
LEFT JOIN dbo.SettopSubscription s2 ON s1.MacAddr = s2.MacAddr
AND s2.PackageId = 37
WHERE s2.MacAddr IS NULL
听起来你想要这个:
declare @pid int
set @pid=37
insert into dbo.SettopSubscription (macaddr, packageid)
select distinct ss.macaddr, @pid
from dbo.SettopSubscription ss
where not exists (
select * from dbo.SettopSubscription ss2
where ss2.macaddr=ss.macaddr and ss2.packageid=@pid)
对于第 1 列中的每个唯一 macaddr,这只是插入一条包含您指定的 packageid 的记录,并确保该组合尚不存在。
我在假设您可以重用查询的情况下添加了变量。如果将来 运行,将文字 37 放在多个位置很容易导致数据问题,您只更新第一次使用文字。
这将为每个不同的 MacAddr
插入一条记录,其中 PackageId
为 37
,而 PackageId
为 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
);
使用 SQL 服务器 我试图在 table 的第 1 列中找到每个唯一值,然后使用该唯一的第 1 列值插入一个新行并添加第 2 列值。第 2 列的值每次都相同。
注意:我可以通过从第 1 列的数据库中提取唯一值并为每个添加一个插入来做到这一点,但我在第 1 列中有 160 万个唯一值,所以这样写会很烦人.
以第 1 列中的 2 个唯一值为例:
select *
from dbo.SettopSubscription
where MacAddr = '0000000ee4b5'
or MacAddr = '0000003a9667'
结果:
MacAddr PackageId
------------ -----------
0000000ee4b5 11
0000000ee4b5 3
0000003a9667 241
0000003a9667 241
0000003a9667 11
0000003a9667 211
0000003a9667 8
0000003a9667 4411
0000003a9667 4412
0000003a9667 4479
现在我想将 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
最终结果:
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***
感谢您提前的帮助。
试试这个:
insert into dbo.SettopSubscription (MacAddr,PackageId)
select MacAddr, 'your_PackageId_Value' from
(select count(dbo.SettopSubscription.MacAddr ) nbr, MacAddr from
dbo.SettopSubscription group by MacAddr ) tmp where tmp.nbr=1
到INSERT
一条新记录到SettopSubscription
table每个唯一值MacAddr
,与PackageId
的37
(如果 MacAddr
和 PackageId
的组合在 table 中已有记录,则不插入:
INSERT INTO SettopSubscription (MacAddr, PackageId)
SELECT DISTINCT s1.MacAddr, 37
FROM dbo.SettopSubscription s1
LEFT JOIN dbo.SettopSubscription s2 ON s1.MacAddr = s2.MacAddr
AND s2.PackageId = 37
WHERE s2.MacAddr IS NULL
听起来你想要这个:
declare @pid int
set @pid=37
insert into dbo.SettopSubscription (macaddr, packageid)
select distinct ss.macaddr, @pid
from dbo.SettopSubscription ss
where not exists (
select * from dbo.SettopSubscription ss2
where ss2.macaddr=ss.macaddr and ss2.packageid=@pid)
对于第 1 列中的每个唯一 macaddr,这只是插入一条包含您指定的 packageid 的记录,并确保该组合尚不存在。
我在假设您可以重用查询的情况下添加了变量。如果将来 运行,将文字 37 放在多个位置很容易导致数据问题,您只更新第一次使用文字。
这将为每个不同的 MacAddr
插入一条记录,其中 PackageId
为 37
,而 PackageId
为 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
);