Заполнение всей строки строк функцией last_value () oracle - PullRequest
0 голосов
/ 05 февраля 2020

Прежде всего у меня есть эта таблица.

CREATE TABLE tabla_1
(table_num NUMBER, amount NUMBER, first_name VARCHAR2(100), l_name VARCHAR2(100));

INSERT INTO tabla_1 (table_num, amount, first_name,l_name) VALUES (1,1,'Luis', 'Rosas');
INSERT INTO tabla_1 (table_num, amount, first_name,l_name) VALUES (1,1,'Carlos','Borolas');
INSERT INTO tabla_1 (table_num, amount, first_name,l_name) VALUES (1,2,'Elena','Zeta');
INSERT INTO tabla_1 (table_num, amount, first_name,l_name) VALUES (1,null,null,null);
INSERT INTO tabla_1 (table_num, amount, first_name,l_name) VALUES (2,null,null,null);

commit;
query result:


 TABLE_NUM     AMOUNT FIRST_NAME                                                                                           L_NAME                                                                                             
---------- ---------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
         1          1 Luis                                                                                                 Rosas                                                                                               
         1          1 Carlos                                                                                               Borolas                                                                                             
         1          2 Elena                                                                                                Zeta                                                                                                
         1       -1 'N/A'                                                                                                  'N/A'                                                                                                                                                                                                                                                                                           
         2       -1 'N/A'                                                                                                  'N/A'                                                                                                                                                                                                                       


Expected result:


 TABLE_NUM     AMOUNT FIRST_NAME                                                                    L_NAME                                                                                             
---------- ---------- ----------------------------------------------------------------------------- ---------------------------------------------------------------
         1          1 Luis                                                                          Rosas                                                                                               
         1          1 Carlos                                                                        Borolas                                                                                             
         1          2 Elena                                                                         Zeta                                                                                                
         1          2 Elena                                                                         Zeta                                                                                                                                                                                                                                                                                           
         2          2 Elena                                                                         Zeta                                                                                                                                                                                                                       


извините за испанскую таблицу sh, engli sh это не мой родной язык.

Вопрос:

Примечание: в последних строках у меня есть 'N / A', потому что эти значения уже были вставлены в нуль. (Я не могу вставить нулевые значения в таблицу, по крайней мере, мне нужно вставить что-то -1 на нулевые числа и 'n / a' на нулевое varchar2), Это уже сделано с кодом.

2. - Как я могу заменить эти значения "" "null" "" "предыдущими последними значениями" "" "" null "" "", известными пользователем?

3. - которые лучше last_value или ЛАГ, а как мне это использовать? можно использовать задержку или последнее значение в полной строке?

1 Ответ

1 голос
/ 06 февраля 2020

NVL + LAST_VALUE может быть одним из вариантов:

SQL> select table_num,
  2    nvl(amount, last_value(amount ignore nulls) over (order by table_num)) amount,
  3    nvl(first_name, last_value(first_name ignore nulls) over (order by table_num)) first_name
  4  from tabla_1;

 TABLE_NUM AMOUNT FIRST_NAME
---------- ------ --------------------
         1      1 Carlos
         1      1 Luis
         1      2 Elena
         1      2 Elena
         2      2 Elena

SQL>

Если нет NULL с (как показывают данные выборки), но -1 и N/A , затем используйте CASE:

select table_num, 
  case when amount = -1 then last_value(amount ignore nulls) over (order by table_num)
       else amount
  end amount, 
  --
  case when first_name = 'N/A' then last_value(first_name ignore nulls) over (order by table_num)
       else first_name
  end first_name
from tabla_1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...