sql - 如何在 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”。
任何帮助表示赞赏。谢谢!
解决方案
不使用连接或子查询的一种快速方法是创建具有相同结构的表 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;
现在你已经过滤了你的表格。
推荐阅读
- c++ - 使用共享指针实现单例的正确方法?
- python - 发生异常:错误 mpg123_seek:无效的 RVA 模式。(代码 12)
- rust - 为什么这个 Rust 错误消息谈论数据“流动”?
- c++ - Lambda 函数给出了意外的输出
- vega-lite - 如何在 vega 公式变换中使用阶乘(!)
- javascript - 如何在 v-data-iterator 中获取自定义插槽?
- c++ - 如何正确使用 std::cin.get() 和 std::cin.peek() 的返回值?
- php - 检查用户是否经过身份验证或没有@Guest 的访客
- .net - Dockerfile复制功能与.NET发布交互
- c# - 如何在接口 IProlongable(存款)中实现 CanToProlong 方法?