T-SQL:清除冗余行同时保留单行记录
维护数据完整性至关重要,消除重复行是其中一个关键步骤。在本例中,由于数据录入错误,出现了重复记录。您的目标是消除这些多余的行,但需要精确操作——确保保留单个重复项。
解决方案:使用 CTE 和 ROW_NUMBER()
在 SQL 2005 或更高版本中,您可以结合使用公用表表达式 (CTE) 和 ROW_NUMBER() OVER 子句来实现您的目标。CTE 充当过滤器,隔离相关数据,而 ROW_NUMBER() 函数为预定义分区组(在本例中为关键列)中的每一行分配一个序列号。
此技术使您可以根据所需的条件隔离重复行。通过附加一个 WHERE 子句,其中包含检查行号是否大于 1 的条件,您可以精确定位并删除多余的行。
实现
<code class="language-sql">WITH cte AS ( SELECT [foo], [bar], row_number() OVER(PARTITION BY [foo], [bar] ORDER BY [baz]) AS [rn] FROM [TABLE] ) DELETE FROM cte WHERE [rn] > 1</code>
自定义选项
CTE 中的 ORDER BY 子句提供了对行进行排序的灵活性。如果您的目标是保留最新的行,请按相关的日期时间列以降序排列结果(例如,ORDER BY [baz] DESC)。请记住,排序标准的选择完全可以根据您的具体需求进行自定义。
以上是如何在保留一个实例的同时删除 T-SQL 中的重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!