Как установить одинаковые значения в столбце на ноль, не удаляя строку в SQL / Impala? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь найти способ обнуления всех, кроме одного дублирующегося значения в столбце, без удаления строки. Ниже приведен упрощенный пример, который отображает общую идею. Столбец, в котором необходимо установить нулевое значение для дубликата, называется «Общая сумма», если для одного и того же заказа имеется более одной записи.

Исходная структура данных

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

Я надеюсь, что это возможно. Буду очень признателен за вашу помощь!

Maxi

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Вы можете сделать это в 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.

0 голосов
/ 24 марта 2019

Вы можете сделать это с помощью 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
...