Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Aggregate Functions
 

Max and decode function

SQL> SQL> Create table objects ( oid int primary key, name varchar2(255) ); Table created. SQL> SQL> Create table attributes(   2      attrId int primary key, attrName varchar2(255),   3      datatype varchar2(25)   4  ); Table created. SQL> SQL> Create table object_Attributes(   2      oid int, attrId int, value varchar2(4000),   3      primary key(oid,attrId)   4  ); Table created. SQL> SQL> Create table Links (   2      oid1 int, oid2 int,   3      primary key (oid1, oid2)   4  ); Table created. SQL> SQL> insert into attributes values ( 1, 'DATE_OF_BIRTH', 'DATE' ); 1 row created. SQL> insert into attributes values ( 2, 'FIRST_NAME',    'STRING' ); 1 row created. SQL> insert into attributes values ( 3, 'LAST_NAME',    'STRING' ); 1 row created. SQL> SQL> insert into objects values ( 1, 'PERSON' ); 1 row created. SQL> insert into object_Attributes values( 1, 1, '15-mar-1965' ); 1 row created. SQL> insert into object_Attributes values( 1, 2, 'Thomas' ); 1 row created. SQL> insert into object_Attributes values( 1, 3, 'Kyte' ); 1 row created. SQL> SQL> insert into objects values ( 2, 'PERSON' ); 1 row created. SQL> insert into object_Attributes values( 2, 1, '21-oct-1968' ); 1 row created. SQL> insert into object_Attributes values( 2, 2, 'John' ); 1 row created. SQL> insert into object_Attributes values( 2, 3, 'Smith' ); 1 row created. SQL> SQL> select * from (   2  select   3  max(decode(attrName, 'FIRST_NAME', value, null)) first_name,   4  max(decode(attrName, 'LAST_NAME',  value, null)) last_name,   5  max(decode(attrName, 'DATE_OF_BIRTH',  value, null)) date_of_birth   6    from objects, object_attributes, attributes   7  where attributes.attrName in ( 'FIRST_NAME', 'LAST_NAME', 'DATE_OF_BIRTH' )   8     and object_attributes.attrId = attributes.attrId   9     and object_attributes.oid = objects.oid  10     and objects.name = 'PERSON'  11  group by objects.oid  12         )  13  where last_name = 'Smith' or date_of_birth like '%-mar-%'  14  / FIRST_NAME -------------------------------------------------------------------------------- LAST_NAME -------------------------------------------------------------------------------- DATE_OF_BIRTH -------------------------------------------------------------------------------- Thomas Kyte 15-mar-1965 John Smith 21-oct-1968 FIRST_NAME -------------------------------------------------------------------------------- LAST_NAME -------------------------------------------------------------------------------- DATE_OF_BIRTH -------------------------------------------------------------------------------- SQL> SQL> drop table objects; Table dropped. SQL> drop table attributes; Table dropped. SQL> drop table object_attributes; Table dropped. SQL> drop table links; Table dropped. SQL>