根据对其他列的查询,删除mysql表中特定列的重复值

根据对其他列的查询,删除mysql表中特定列的重复值,mysql,sql,Mysql,Sql,我在SQL数据库中有一个表,用于记录特定产品的客户销售情况。我有每个产品的每月目标,如下所示 产品A-50件 现在,在我的表格中,我看到了客户方面的销售情况和常见的每月产品销售目标 Customer Product MonthlyTargetQty Customer A Product 1 50 Customer B Product 1 50 Customer C Product 1 50 Customer D Product 1

我在SQL数据库中有一个表,用于记录特定产品的客户销售情况。我有每个产品的每月目标,如下所示

产品A-50件

现在,在我的表格中,我看到了客户方面的销售情况和常见的每月产品销售目标

Customer    Product     MonthlyTargetQty
Customer A  Product 1       50
Customer B  Product 1       50
Customer C  Product 1       50
Customer D  Product 1       50
我只想在MonthlyTargetty列中保留不同的值,不想删除Product列中重复的Product name。请帮忙提个问题

我想要的是:-

Customer    Product     MonthlyTargetQty
Customer A  Product 1       50
Customer B  Product 1       0
Customer C  Product 1       0
Customer D  Product 1       0
你似乎想要:

select customer, product,
       (case when row_number() over (partition by product order by customer) = 1 then monthlytargetqty end) as monthlytargetqty
from t
order by product, customer;
它使用row_number为每个客户定义第一行,然后使用case表达式在该行上保留所需的值。请注意,order by与row\ U number的partition by/order by是一致的

编辑:

如果您想更新现有的表(我觉得这是一个非常糟糕的主意),可以执行以下操作:

update t join
       (select product, min(customer) as min_customer
        from t
        group by product
       ) tt
       on t.product = tt.product and t.customer <> tt.min_customer
    set monthlytargetqty = 0;

从评论来看,你似乎想要更新我添加的更新

    with cte as
    (
    select customer, product,
           (case when row_number() over (partition by product order by customer) = 1 then monthlytargetqty end) as monthlytargetqty
    from t
    )
  update a 
  set a.MontylyTargetQty= b.monthlytargetqty
  from ProductAnalysisTable a join cte on
a.customer=cte.customer and a.product=b.product

顺便说一句,第一部分是sir@gordon,所以接受他的答案

这看起来更像是一个应该在演示层处理的演示问题。戈登的答案是有效的。@VarinderVerma。你的标题很有误导性。您没有删除任何内容,尤其是没有删除任何行。感谢您的指导。它工作得很好,但正在执行select操作,而不是更新现有表。你能指导我更新表查询吗?更新ProductAnalysisTable set MontylyTargetty=case,当按客户的产品订单划分的行数=1时,然后更新MontylyTargetty end@VarinderVerma。这对我来说似乎是个坏主意,但我编辑了答案并进行了更新。我不喜欢覆盖数据,尤其是当一个简单的查询满足您的需要时。谢谢。它在另一个查询中对我有效,这是一个非常有用的代码。谢谢again@VarinderVerma . . . 我很惊讶你没有接受这个答案。@VarinderVerma。这不是有效的MySQL代码,这是问题的标签。接受一个语法上不正确的答案是很容易误导人的。@GordonLinoff。它确实对我有用。我不确定问题出在哪里,但这段代码与我所需要的一样。@VarinderVerma。给你的问题贴上标签。我不知道为什么Zaynul回答的语法与问号不一致,但就目前情况而言,这并不能回答您提出的问题。