首页 > 解决方案 > 如何在 SQL Server 中识别两列完全匹配的行

问题描述

我的问题可能听起来很奇怪,但请多多包涵。这就是我所拥有的:

表产品:


ProductName     Cost   
Pen A           1.00  
Pen A           1.00  
Pen B           1.00   
Pen A           2.00  
Pen C           3.00  
Pen C           3.00  
Pen C           3.00

如何从中删除真正的重复项?如果查看数据,您可以看到 Pen C 有三行数据完全相同。Pen A 有 2 行数据相同,1 行成本不同。我不想消除“Pen A”。

一个简单的 group by 语句,如下所示:

SELECT ProductName,Cost FROM PRODUCTS GROUP BY ProductName,Cost HAVING COUNT(*) > 1

这不起作用,因为它也会拾取“PEN A”。

任何帮助表示赞赏。谢谢!

标签: sqlsql-server

解决方案


不使用连接或子查询的一种快速方法是创建具有相同结构的表 PRODUCTS_TEMP 并仅插入唯一行:

INSERT INTO PRODUCTS_TEMP 
SELECT DISTINCT ProductName,Cost FROM PRODUCTS;

然后您可以删除您的 PRODUCTS 表并将 PRODUCTS_TEMP 重命名为 PRODUCTS:

DROP TABLE PRODUCTS;
ALTER TABLE PRODUCTS_TEMP RENAME TO PRODUCTS;

现在你已经过滤了你的表格。


推荐阅读