Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:为第1列中的每个唯一值插入新行_Sql Server_Insert_Sql Update_Insert Into - Fatal编程技术网

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

Sql server SQL Server:为第1列中的每个唯一值插入新行,sql-server,insert,sql-update,insert-into,Sql Server,Insert,Sql Update,Insert Into,使用SQL Server,我试图在表的第1列中查找每个唯一的值,然后使用该唯一的第1列值插入新行,并添加第2列值。第2列的值每次都相同 注意:我可以通过从第1列的数据库中取出唯一值并为每个值添加一个insert来做到这一点,但是第1列中有160万个唯一值,所以这样写会很累人 以第1列中的2个唯一值为例: select * from dbo.SettopSubscription where MacAddr = '0000000ee4b5' or MacAddr = '0000003a9667

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

注意:我可以通过从第1列的数据库中取出唯一值并为每个值添加一个insert来做到这一点,但是第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

对于
MacAddr
的每个唯一值,在
SettopSubscription
表中插入一条新记录,其
PackageId
37
(如果表中已有一条记录用于
MacAddr
PackageId
,则不插入):

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
,而该记录不包含alr已经有了
37的
PackageId

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
);

现在我想把PackageId=37添加到每个唯一的MacAddr中,你想让它成为过滤器的一部分还是什么?因此,为了澄清,你想从
table1
中选择distinct
column1
,然后将该值插入
table1
中,并在
column2
中使用不同的值?还是希望从
column1
中选择相应的值到目前为止只发生一次,并将那些值插入到
表1
列2
?不确定您所说的过滤器是什么意思,我对mssql比较新,但在其他脚本中,我很可能会将唯一的MacAddr值添加到列表中,然后运行for或if语句,为该列表中MacAddr的每个值添加新行。是否可行mssql中的le?因此,当您在第1列中发现一个唯一的值时,您想更新该值的第2列,或者您想插入一行,其中包含该值和第2列的值?为我们提供一个表的初始外观示例,以及一个您希望它在末尾显示的数据示例,这可能会有一些帮助。这将清除所有配置usion。这看起来与他要求的非常接近,但我想我会在那里设置一个条件,排除任何已经有
PackageId
37
MacAddr
——至少根据评论中的确认。按预期工作,谢谢!尝试其他选项以停止编写du的可能性折叠行。如果PackageId=37已经在表中,有人有一个解决方案可以添加到表中,从而消除添加新行的情况吗?@Tim看到我的答案,如果3N1GM4很快更新他的,我将删除我的。是的,这也会起作用。如果OP想接受你的答案,因为你大部分时间都是先得到它的,我很好。会投票给你的eit吗她的方式。=)服务器:Msg 170,15级,状态1,第3行,第3行:“,”附近的语法不正确。哇。谢谢。这将运行,但不会将新值添加到表中。这将按预期工作,并添加在PackageId='x'已存在时不写入重复行的附加内容。