Как заменить нуль или 0 обратно в Oracle View, когда определенные критерии выполнены - PullRequest
0 голосов
/ 16 октября 2018

, поэтому я пытаюсь отобразить мои «исходные значения» (до запуска какого-либо процесса очистки данных, который я написал) в представлении всякий раз, когда столбец 'CHANGE_CODE' помечается как ' NE 'или' NI ', мне нужно получить значение, которое соотносится с тем же Цвет , Автомобиль и Отметка времени (этобудет составным ключом), но потребуется change_code = ' ORIG ' или ' ORIG2 (в зависимости от того, что change_code соотносится с неотмеченным значением / записьюis).

То, что у меня изначально:

VAL      COLOR       TIMESTAMP                    CAR          CHANGE_CODE
NULL     Blue        10/16/2018 01:00 AM EST      BMW          NE
7        Blue        10/16/2018 01:00 AM EST      BMW          ORIG
20       Blue        10/16/2018 02:00 AM EST      BMW          ORIG
 0       Blue        10/16/2018 02:00 AM EST      BMW          NE
15       Blue        10/16/2018 03:00 AM EST      BMW          ORIG
22       Blue        10/16/2018 04:00 AM EST      BMW          ORIG
23       Blue        10/16/2018 05:00 AM EST      BMW          ORIG            

Как должен выглядеть мой конечный результат:

VAL      COLOR       TIMESTAMP                    CAR          CHANGE_CODE
NULL     Blue        10/16/2018 01:00 AM EST      BMW          ORIG
 0       Blue        10/16/2018 02:00 AM EST      BMW          ORIG 
15       Blue        10/16/2018 03:00 AM EST      BMW          ORIG
22       Blue        10/16/2018 04:00 AM EST      BMW          ORIG
23       Blue        10/16/2018 05:00 AM EST      BMW          ORIG        

Что я пробовал:

select
       CASE WHEN change_code IN ('NE', NI')
            THEN MIN_VAL
            ELSE VAL
             END                VAL
     , color
     , timestamp
     , car
     , change_code
  from table
  join (select min(val) as MIN_VAL
             , color
             , timestamp
             , car
          from table
          group by COLOR, TIMESTAMP, CAR
        ) subq on table.color = subq.color AND table.timestamp = subq.timestamp AND table.car = subq.car;

Заранее спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

Для предоставленных вами данных и описанной логики вы можете сделать это с помощью агрегации:

select (case when sum(case when change_code in ('NI', 'NE') then 1 else 0 end) > 0
             then max(case when change_code in ('NI', 'NE') then val end)
             else max(val)
        end) as val
       color, timestamp, car,
       max(case when change_code not in ('NI', 'NE') then change_code end) as change_code
from t
group by color, timestamp, car;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...