Use coalesce during the table join : coalesce « Conversion Functions « Oracle PL/SQL Tutorial






SQL>
SQL>
SQL> create table employees(
  2    empno      NUMBER(4)
  3  , ename      VARCHAR2(8)
  4  , init       VARCHAR2(5)
  5  , job        VARCHAR2(8)
  6  , mgr        NUMBER(4)
  7  , bdate      DATE
  8  , msal       NUMBER(6,2)
  9  , comm       NUMBER(6,2)
 10  , deptno     NUMBER(2) ) ;

Table created.

SQL>
SQL>
SQL> insert into employees values(1,'Jason',  'N',  'TRAINER', 2,   date '1965-12-18',  800 , NULL,  10);

1 row created.

SQL> insert into employees values(2,'Jerry',  'J',  'SALESREP',3,   date '1966-11-19',  1600, 300,   10);

1 row created.

SQL> insert into employees values(3,'Jord',   'T' , 'SALESREP',4,   date '1967-10-21',  1700, 500,   20);

1 row created.

SQL> insert into employees values(4,'Mary',   'J',  'MANAGER', 5,   date '1968-09-22',  1800, NULL,  20);

1 row created.

SQL> insert into employees values(5,'Joe',    'P',  'SALESREP',6,   date '1969-08-23',  1900, 1400,  30);

1 row created.

SQL> insert into employees values(6,'Black',  'R',  'MANAGER', 7,   date '1970-07-24',  2000, NULL,  30);

1 row created.

SQL> insert into employees values(7,'Red',    'A',  'MANAGER', 8,   date '1971-06-25',  2100, NULL,  40);

1 row created.

SQL> insert into employees values(8,'White',  'S',  'TRAINER', 9,   date '1972-05-26',  2200, NULL,  40);

1 row created.

SQL> insert into employees values(9,'Yellow', 'C',  'DIRECTOR',10,  date '1973-04-27',  2300, NULL,  20);

1 row created.

SQL> insert into employees values(10,'Pink',  'J',  'SALESREP',null,date '1974-03-28',  2400, 0,     30);

1 row created.

SQL>
SQL>
SQL> create table course_schedule
  2  ( course     VARCHAR2(6)
  3  , begindate  DATE
  4  , trainer    NUMBER(4)
  5  , location   VARCHAR2(20)) ;

Table created.

SQL>
SQL>
SQL> insert into course_schedule values ('SQL',date '1999-04-12',1,'VANCOUVER' );

1 row created.

SQL> insert into course_schedule values ('OAU',date '1999-08-10',2,'CHICAGO');

1 row created.

SQL> insert into course_schedule values ('SQL',date '1999-10-04',3,'SEATTLE');

1 row created.

SQL> insert into course_schedule values ('SQL',date '1999-12-13',4,'DALLAS' );

1 row created.

SQL> insert into course_schedule values ('JAV',date '1999-12-13',5,'SEATTLE');

1 row created.

SQL> insert into course_schedule values ('XML',date '2000-02-03',6,'VANCOUVER' );

1 row created.

SQL> insert into course_schedule values ('JAV',date '2000-02-01',7,'DALLAS' );

1 row created.

SQL> insert into course_schedule values ('PLS',date '2000-09-11',8,'VANCOUVER' );

1 row created.

SQL> insert into course_schedule values ('XML',date '2000-09-18',NULL,'SEATTLE');

1 row created.

SQL> insert into course_schedule values ('OAU',date '2000-09-27',9,'DALLAS' );

1 row created.

SQL> insert into course_schedule values ('ERM',date '2001-01-15',10, NULL    );

1 row created.

SQL> insert into course_schedule values ('PRO',date '2001-02-19',NULL,'VANCOUVER' );

1 row created.

SQL> insert into course_schedule values ('RSD',date '2001-02-24',8,'CHICAGO');

1 row created.

SQL>
SQL>
SQL> create table courses
  2  ( code        VARCHAR2(6)
  3  , description VARCHAR2(30)
  4  , category    CHAR(3)
  5  , duration    NUMBER(2)) ;

Table created.

SQL>
SQL>
SQL> insert into courses values('SQL','SQL course',    'GEN',4);

1 row created.

SQL> insert into courses values('OAU','Oracle course', 'GEN',1);

1 row created.

SQL> insert into courses values('JAV','Java course',   'BLD',4);

1 row created.

SQL> insert into courses values('PLS','PL/SQL course', 'BLD',1);

1 row created.

SQL> insert into courses values('XML','XML course',    'BLD',2);

1 row created.

SQL> insert into courses values('ERM','ERM course',    'DSG',3);

1 row created.

SQL> insert into courses values('PMT','UML course',    'DSG',1);

1 row created.

SQL> insert into courses values('RSD','C# course',     'DSG',2);

1 row created.

SQL> insert into courses values('PRO','C++ course',    'DSG',5);

1 row created.

SQL> insert into courses values('GEN','GWT course',    'DSG',4);

1 row created.

SQL>
SQL>
SQL>
SQL> select DISTINCT c.code
  2  ,      o.begindate
  3  ,      c.duration
  4  ,      case when o.trainer is not null
  5              then e.ename
  6              else null
  7         end       as trainer
  8  from   employees e
  9  ,      courses   c
 10  ,      course_schedule o
 11  where  coalesce(o.trainer,-1) in (e.empno,-1)
 12  and    o.course = c.code;

CODE   BEGINDATE   DURATION TRAINER
------ --------- ---------- --------
JAV    13-DEC-99          4 Joe
OAU    27-SEP-00          1 Yellow
JAV    01-FEB-00          4 Red
RSD    24-FEB-01          2 White
OAU    10-AUG-99          1 Jerry
PRO    19-FEB-01          5
SQL    04-OCT-99          4 Jord
ERM    15-JAN-01          3 Pink
XML    18-SEP-00          2
PLS    11-SEP-00          1 White
SQL    13-DEC-99          4 Mary
SQL    12-APR-99          4 Jason
XML    03-FEB-00          2 Black

13 rows selected.

SQL>
SQL>
SQL> drop table employees;

Table dropped.

SQL>
SQL> drop table course_schedule;

Table dropped.

SQL>
SQL> drop table courses;

Table dropped.

SQL>
SQL>








15.11.coalesce
15.11.1.Use coalesce during the table join
15.11.2.COALESCE(state, 'N/A')