如何在不删除sql/impala中的行的情况下将列中的重复值设置为零?

zwghvu4y  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(335)

我试图找到一种方法,如何在不删除行的情况下,将列中除一个重复值外的所有值都设置为零。下面是一个简单的例子,展示了总体思路。如果同一订单有多个条目,则需要将重复值设置为零的列为“总金额”。
初始数据结构

N   Date    Order   Total Amount
1   31.12   10007   100,00
2   31.12   10007   100,00

所需的数据结构

N   Date    Order   Total Amount
1   31.12   10007   100,00
2   31.12   10007     0,00

我希望这是可能的。我将非常感谢你的帮助!
马克西

beq87vna

beq87vna1#

您可以使用exists执行此操作:

select 
  t.productcode, t.orderdate, t.order,
  case when exists (
      select 1 from tablename
      where productcode < t.productcode and 
      orderdate = t.orderdate and order = t.order and
      amount = t.amount
    ) then 0.0 else t.totalamount end totalamount
from tablename t
30byixjq

30byixjq2#

你可以在短时间内完成 select 使用 case 以及 row_number() :

select N, Date, OrderNum,
       (case when row_number() over (partition by ordernum order by n) = 1
             then Total_Amount
             else 0
        end) as total_amount
from t;

注: order 对于列来说是一个非常糟糕的名称,因为它是sql关键字。所以我把它改成了 ordernum .

相关问题