如何在不删除SQL / Impala中的行的同时将列中的重复值设置为零?

时间:2019-03-24 16:20:42

标签: sql impala

我正在尝试找到一种方法,如何将一列中除一个重复值之外的所有重复值都设置为零而不删除行。下面是一个显示示例的简化示例。如果同一订单有多个条目,则需要将重复值设置为零的列为“总计”。

初始数据结构

fb.publicationsCollection
  .doc("pubdata")
  .get()
  .then(res => {
    let pubData = Object.entries(res.data());
    // pubData will look like:
    // [["1892872", {…}], ["1892875", {…}]]
   })

所需的数据结构

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

我希望这是可能的。非常感谢您的帮助!

马克西

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

您可以在select中使用caserow_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