sql-server - CTE 删除重复数据
问题描述
我有一个重复行的表。我想删除重复项并添加一个复合键以避免重复项。
;WITH myCTE (RowNumber, invoice_id, Invoice_Number, Organization_id, status, created_at) AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY Invoice_Number ORDER BY invoice_id, Invoice_Number DESC) AS RowNumber ,
invoice_id, Invoice_Number, Organization_id,status, created_at
FROM
Invoice_Export
)
SELECT *
FROM myCTE
WHERE Invoice_number LIKE '%-00%'
ORDER BY invoice_id
select * from Invoice_Export
ALTER TABLE Invoice_Export ALTER COLUMN [Organization_id] NVARCHAR(36) NOT NULL
ALTER TABLE Invoice_Export ALTER COLUMN [Invoice_Number] NVARCHAR(15) NOT NULL
ALTER table Invoice_Export
ADD CONSTRAINT [Composite_Key_Invoice] PRIMARY KEY CLUSTERED (Organization_id, Invoice_Number)
有没有其他更好的方法。
解决方案
我猜 'invoice_id' 是独一无二的,所以
DELETE FROM Invoice_Export duplicate
WHERE EXISTS (SELECT 1 FROM Invoice_Export
WHERE duplicate.invoice_id > Invoice_Export.invoice_id
AND duplicate.Organization_id = Invoice_Export.Organization_id
AND duplicate.Invoice_Number = Invoice_Export.Invoice_Number)
相反PRIMARY KEY
,您可以使用UNIQUE
(删除重复项后)
ALTER TABLE Invoice_Export
ADD CONSTRAINT UC_Invoice_Export UNIQUE (Organization_id, Invoice_Number);
推荐阅读
- javascript - 角度复选框不能被禁用
- visual-studio-2010 - SSIS包.csv问题 - 包无法识别单元格是数字,如何转换
- c# - 使用 SQL/LINQ 删除基于多个属性的重复实体
- python - PYTHON 使用空值、字符串和数值对列表进行排序
- kotlin - 如何将数据传递给微调器
- javascript - Jquery 出错,提交按钮不显示
- python - 使用行数相同但列数不同的另一个矩阵填充矩阵
- python - 使用 matplotlib 在同一轴上绘制多条形图
- linux - Azure Pipelines、托管 Ubuntu 代理和带有 PowerShell Core 的 Azure CLI 任务:使用 Az 模块并正确进行身份验证
- react-native - 反应原生 | 华为应用图库服务?