我的问题听起来可能很奇怪,但请耐心等待。这是我所拥有的:
表产品:
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
如何从中删除真正的重复项?如果您查看数据,您可以看到笔 C 有三行具有完全相同的数据。笔 A 有 2 行具有相同的数据,1 行具有不同的成本。我不想消除"笔A"。
一个简单的分组依据语句,如下所示:
SELECT ProductName,Cost FROM PRODUCTS GROUP BY ProductName,Cost HAVING COUNT(*) > 1
这行不通,因为它也会拾取"笔会A"。
任何帮助,不胜感激。谢谢!
不使用联接或子查询的一种快速方法是创建一个具有相同结构的表PRODUCTS_TEMP,并仅插入唯一的行:
INSERT INTO PRODUCTS_TEMP
SELECT DISTINCT ProductName,Cost FROM PRODUCTS;
然后,您可以删除"产品"表并将PRODUCTS_TEMP重命名为"产品":
DROP TABLE PRODUCTS;
ALTER TABLE PRODUCTS_TEMP RENAME TO PRODUCTS;
现在,您已筛选表。
您可以将CTE
与Row_Number()
一起使用来删除重复
例
;with cte as (
Select *
,RN = Row_Number() over (Partition By ProductName,Cost Order By (Select null))
from PRODUCTS
)
Delete from cte where RN>1
更新的表格
ProductName Cost
Pen A 1.00
Pen B 1.00
Pen A 2.00
Pen C 3.00
以您喜欢的任何方式清理混乱之后,您可能想考虑在那里创建一个包含该 2 列的约束索引和/或验证以确保在插入新行之前不存在该组合。
祝你好运
我认为你想要的产品只有一个成本。 㞖:
select productname
from products
group by productname
having min(cost) = max(cost);