oracle 如何获取列中的值与同一行中的主键匹配的数据?

ldxq2e6h  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(118)

我正在下桌
x1c 0d1x的数据
我需要像“account_number with any column which doesn 't have null“这样的数据
条件:
1.帐号列不能为空。它总是有价值的
1.应忽略空列。
1.在每一行(在表中)帐号和非空列应形成一个记录。
1.代码应该是SQL而不是PL/SQL。
下面是示例输出格式



表语法:

CREATE TABLE demo (acc_no number primary key, id_no varchar2(20), id_no2 varchar2(20), id_no3 number, lice_no number)

INSERT INTO demo (acc_no,id_no,id_no2) VALUES ( '452', '452', '452');
INSERT INTO demo (acc_no,id_no3,lice_no) VALUES ('411','568','987');

字符串

nxowjjhe

nxowjjhe1#

这是Oracle,没有text数据类型,所以我切换到varchar2

SQL> desc demo
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ACC_NO                                    NOT NULL NUMBER(38)
 ID_NO                                              VARCHAR2(20)
 ID_NO2                                             VARCHAR2(20)
 ID_NO3                                             NUMBER(38)
 LICE_NO                                            NUMBER(38)

SQL> select * From demo;

    ACC_NO ID_NO                ID_NO2                   ID_NO3    LICE_NO
---------- -------------------- -------------------- ---------- ----------
       452 452                  452
       411                                                  568        987

字符串
一个简单的选项是union列来获取行;由于数据类型必须匹配,我在integer列上使用了to_char

SQL> select acc_no, id_no            from demo where id_no   is not null
  2  union all
  3  select acc_no, id_no2           from demo where id_no2  is not null
  4  union all
  5  select acc_no, to_char(id_no3)  from demo where id_no3  is not null
  6  union all
  7  select acc_no, to_char(lice_no) from demo where lice_no is not null;

    ACC_NO ID_NO
---------- ----------------------------------------
       452 452
       452 452
       411 568
       411 987

SQL>

相关问题