使用SQL Server我试图找到表的第1列中的每个唯一值,然后使用该唯一的列1值插入新行并添加第2列值。第2列值每次都相同。
要注意:我可以通过从第1列的数据库中提取唯一值并为每个数据库添加插入来实现此目的,但是在第1列中我有160万个唯一值,因此以这种方式编写它会很烦人。 / p>
从第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***
提前感谢您的帮助。
答案 0 :(得分:3)
这将为每个不同的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
);
:
self.view.layoutIfNeeded()
答案 1 :(得分:2)
INSERT
表SettopSubscription
新记录MacAddr
每个唯一值为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
和<ComboBox x:Name="cmbTransfer" Width="200" Height="40" BorderBrush="Transparent" BorderThickness="0"
Margin="0,0,20,0" AutomationProperties.Name="Transfer State" IsTextSearchEnabled="true" FontSize="20" SelectionChanged="Transfer_Click" IsEnabled="False"/>
comboBoxItem.Content = (object)current.Attributes["uscb_language"].ToString();
答案 2 :(得分:0)
试试这个:
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
答案 3 :(得分:0)
听起来你想要这个:
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放在多个位置很容易导致数据问题,如果在将来的运行中,您只更新文字的第一次使用。