Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 删除重复的行集 数据 创建表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 - Fatal编程技术网

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 删除重复的行集 数据 创建表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

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 终止 终止 错误 如果我没有弄错,您可以在一条语句中删除镜像记录,而无需使用其他计算列:

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