3,491
社区成员
发帖
与我相关
我的任务
分享
SQL>
SQL> create table type(id int , c varchar(10));
Table created
SQL> begin
2 insert into type values(1,'HKD') ;
3 insert into type values(2,'USD') ;
4 insert into type values(3,'OTHER');
5 commit ;
6 end ;
7 /
PL/SQL procedure successfully completed
SQL> create table base(AC_NO varchar(10)) ;
Table created
SQL> begin
2 insert into base values('10001');
3 insert into base values('10002');
4 insert into base values('10003');
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed
SQL> create table data(AC_NO varchar2(10),AMOUNT int , TX_CCY varchar(10));
Table created
SQL> begin
2 insert into data values('10001', 100 , 'HKD');
3 insert into data values('10001', 200 , 'USD');
4 insert into data values('10002', 300 , 'HKD');
5 insert into data values('10003', 400 , 'USD');
6 insert into data values('10003', 500 , 'OTHER');
7 commit ;
8 end ;
9 /
PL/SQL procedure successfully completed
SQL> select nvl(type.c ,data.tx_ccy) tx_ccy ,
2 nvl(data.AC_NO ,base.AC_NO) AC_NO,
3 nvl(data.AMOUNT,0) AMOUNT
4 from base cross join type
5 left join data on type.c = data.tx_ccy and base.AC_NO = data.ac_no
6 order by base.ac_no , type.id;
TX_CCY AC_NO AMOUNT
---------- ---------- ----------
HKD 10001 100
USD 10001 200
OTHER 10001 0
HKD 10002 300
USD 10002 0
OTHER 10002 0
HKD 10003 0
USD 10003 400
OTHER 10003 500
9 rows selected
SQL> drop table data purge ;
Table dropped
SQL> drop table type purge ;
Table dropped
SQL> drop table base purge ;
Table dropped
SQL>