Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 用最后一个_值()填充完整的行_Database_Oracle_Oracle11g - Fatal编程技术网

Database 用最后一个_值()填充完整的行

Database 用最后一个_值()填充完整的行,database,oracle,oracle11g,Database,Oracle,Oracle11g,首先我有这张桌子 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_n

首先我有这张桌子

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;
对不起,这是西班牙语桌子,英语不是我的母语

问题是:

注意:在最后几行中,我有“N/A”,这是因为该值已插入空值。我不能在表上插入空值,至少我必须在空数字上插入-1,在空varchar2上插入'n/a',这已经用代码完成了

2.-如何将此空值替换为用户已知的上一个非空值

3.-最后的值或滞后哪个更好,我如何使用它?可以在整行中使用lag或last值?

NVL+last\u值可能是一个选项:

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>
如果样本数据显示没有空值,而是-1和N/A,那么用例:


这一点都不坏,但是我已经有了-1和'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                                                                                                                                                                                                                       


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>
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