sql-server - 如何编写存储过程来查找和删除 SQL Server 中没有主键的重复项
问题描述
我正在尝试从包含 29 列的表中查找并删除重复项,如下所示:
[Partitioned Commodity Code] (nvarchar(max),null)
[Supplier] (nvarchar(255),null)
[Manufacturer] (nvarchar(255),null)
[Order ID] (nvarchar(55),null)
[Status] (nvarchar(25),null)
[Ordered Date] (nvarchar(105),null)
[Order Method] (nvarchar(55),null)
[Ship to Address] (nvarchar(255),null)
[Address] (nvarchar(255),null)
[City] (nvarchar(55),null)
[State] (nvarchar(55),null)
[Postal Code] (nvarchar(55),null)
[Requisitioner] (nvarchar(100),null)
[Accounting Entity] (nvarchar(255),null)
[Preparer] (nvarchar(255),null)
[Item No] (float,null)
[Description] (nvarchar(max),null)
[Nominal Account] (nvarchar(255),null)
[LineItem ProjectCode] (float,null)
[Cost Center] (nvarchar(100),null)
[CostCenter Description] (nvarchar(max),null)
[Supplier Part Number] (float,null)
[Is Catalogue] (nvarchar(55),null)
[Unit Price] (float,null)
[Quantity] (float,null)
[Line Item Total] (float,null)
[Line Item Total USD] (float,null)
[Currency] (nvarchar(55),null)
[Request Cross Reference] (nvarchar(55),null)
在这个数据集中,没有主键,老实说,我无法弄清楚哪些键组合可以被视为主键来查找和删除重复项。
我尝试了下面的代码考虑[Order ID]
:
select *
from [PO_BuySmart_Main] a
join
(select [Order ID], count(*) as OID
from [PO_BuySmart_Main]
group by [Order ID]
having count(*) > 1 ) b on a.[Order ID] = b.[Order ID]
order by a.[Order ID]
我想考虑所有列以检查重复并相应地删除这些记录。
[PO_BuySmart_Main]
是单个存储过程将为其执行此任务的表名。
任何帮助将不胜感激,谢谢。
解决方案
推荐阅读
- rest - restful url 约定:相同资源多级
- swift - ViewModel 在不创建委托的情况下调用 ViewController 方法 MVVM 模式,Swift
- javascript - 为最终用户清除缓存 Weebly
- python - 如何在 Python 中测量准备好的语句内存大小?
- flutter - 检测散点图圆之间的交点
- python - 如何从特定于供应商的数据类型中查找 SQLAlchemy 通用数据类型
- c++ - MFC/C++ 在另一个对话框的子对话框中动态调整大小?
- c++ - 从指针向量、二维指针数组中删除对象并在一个循环中释放其内存
- c - 当我有 AF_UNIX 的 socket() 时,为什么我需要 socketpair()?
- c# - 如何在 C# 控制台应用程序搜索功能中搜索 SQL Server 表?