Sql 删除重复的行集 数据 创建表tbl_LinkedInvoices 发票编号:varchar50 ,AssociatedInvoiceNbr varchar50 ,罗文布尔国际酒店 ,AssociatedRowNbr int 插入tbl_LinkedInvoices InvoiceNbr,AssociatedInvoiceNbr,RowNbr,AssociatedRowNbr 价值观 ‘A0001’、‘A1001’、1、4、, ‘A0002’、‘A2002’、2、5、, ‘A0002’、‘A3002’、3、6、, ‘A1001’、‘A0001’、4、1、, ‘A2002’、‘A0002’、5、2、, ‘A3002’、‘A0002’、6、3 从tbl_LinkedInvoices中选择* 挑战/目标
tbl_LinkedInvoices用于标识InvoiceNbr a链接到的关联InvoiceNbr b。因此,一个集合可以在表中出现多次,因为a,b=b,a。为了解决这些重新出现的问题,添加了RowNbr和AssociatedRowNbr字段以提供分组序列 使用已识别的重复行,删除重复行,并在表中保留单个唯一记录。当前脚本产生错误,希望有更好的方法编写查询 剧本 使用计数器检查重复行是否仍然存在,如果它确实删除了该行,直到FALSE 声明@RowCounter int 声明@RemoveRow int 设置@RowCounter=1 如果存在,请选择 罗恩布尔 从tbl_LinkedInvoices,其中RowNbr=从tbl_LinkedInvoices中选择AssociatedRowNbr 开始 SET@RemoveRow=从tbl_LinkedINvoices中选择RowNbr 其中RowNbr= 从tbl_LinkedInvoices中选择AssociatedRowNbr,其中RowNbr=@RowCounter 开始 从tbl_LinkedInvoices中删除 哪里 RowNbr=@row 终止 开始 设置@RowCounter=@RowCounter+1 终止 终止 错误 如果我没有弄错,您可以在一条语句中删除镜像记录,而无需使用其他计算列:Sql 删除重复的行集 数据 创建表tbl_LinkedInvoices 发票编号:varchar50 ,AssociatedInvoiceNbr varchar50 ,罗文布尔国际酒店 ,AssociatedRowNbr int 插入tbl_LinkedInvoices InvoiceNbr,AssociatedInvoiceNbr,RowNbr,AssociatedRowNbr 价值观 ‘A0001’、‘A1001’、1、4、, ‘A0002’、‘A2002’、2、5、, ‘A0002’、‘A3002’、3、6、, ‘A1001’、‘A0001’、4、1、, ‘A2002’、‘A0002’、5、2、, ‘A3002’、‘A0002’、6、3 从tbl_LinkedInvoices中选择* 挑战/目标,sql,sql-server,tsql,duplicates,sql-delete,Sql,Sql Server,Tsql,Duplicates,Sql Delete,tbl_LinkedInvoices用于标识InvoiceNbr a链接到的关联InvoiceNbr b。因此,一个集合可以在表中出现多次,因为a,b=b,a。为了解决这些重新出现的问题,添加了RowNbr和AssociatedRowNbr字段以提供分组序列 使用已识别的重复行,删除重复行,并在表中保留单个唯一记录。当前脚本产生错误,希望有更好的方法编写查询 剧本 使用计数器检查重复行是否仍然存在,如果它确实删除了该行,直到FALSE 声明@RowCounter int 声明@RemoveRow
delete t
from #tbl_LinkedInvoices t
where exists (
select 1
from #tbl_LinkedInvoices t1
where
t1.AssociatedInvoiceNbr = t.InvoiceNbr
and t1.InvoiceNbr = t.AssociatedInvoiceNbr
and t1.AssociatedInvoiceNbr > t.AssociatedInvoiceNbr
)
这将删除镜像记录,同时保留其InvoiceNbr小于AssociatedInvoiceNbr的记录
用你的样本数据
执行delete语句后,表的内容为:
InvoiceNbr | AssociatedInvoiceNbr | RowNbr | AssociatedRowNbr
:--------- | :------------------- | -----: | ---------------:
A0001 | A1001 | 1 | 4
A0002 | A2002 | 2 | 5
A0002 | A3002 | 3 | 6
错误不清楚吗?使用in代替=。@GordonLinoff-in返回all或nothing,因为两列中都存在值。这最终有效。智能使用EXISTS,并利用最后一个比较运算符在重复的情况下在数学上给予优先级。非常感谢。 InvoiceNbr | AssociatedInvoiceNbr | RowNbr | AssociatedRowNbr :--------- | :------------------- | -----: | ---------------: A0001 | A1001 | 1 | 4 A0002 | A2002 | 2 | 5 A0002 | A3002 | 3 | 6