这里有几个选择:
with table1 as (select to_date('13/07/2015', 'dd/mm/yyyy') dt, 1 id, 'abc' name from dual union all
select to_date('13/07/2015', 'dd/mm/yyyy') dt, 2 id, 'abc' name from dual union all
select to_date('14/07/2015', 'dd/mm/yyyy') dt, 1 id, 'def' name from dual union all
select to_date('13/07/2015', 'dd/mm/yyyy') dt, 3 id, 'abc' name from dual union all
select to_date('15/07/2015', 'dd/mm/yyyy') dt, 3 id, 'def' name from dual)
-- end of mimicking your table1. See below for the query
select t1.dt date1,
t1.name name1,
t2.dt date2,
t2.name name2,
t1.id
from table1 t1
left outer join table1 t2 on (t1.id = t2.id and t1.name = 'abc' and t2.name = 'def')
where t1.name = 'abc'
order by t1.id;
DATE1 NAME1 DATE2 NAME2 ID
---------- ----- ---------- ----- ----------
13/07/2015 abc 14/07/2015 def 1
13/07/2015 abc 2
13/07/2015 abc 15/07/2015 def 3
with table1 as (select to_date('13/07/2015', 'dd/mm/yyyy') dt, 1 id, 'abc' name from dual union all
select to_date('13/07/2015', 'dd/mm/yyyy') dt, 2 id, 'abc' name from dual union all
select to_date('14/07/2015', 'dd/mm/yyyy') dt, 1 id, 'def' name from dual union all
select to_date('13/07/2015', 'dd/mm/yyyy') dt, 3 id, 'abc' name from dual union all
select to_date('15/07/2015', 'dd/mm/yyyy') dt, 3 id, 'def' name from dual)
-- end of mimicking your table1. See below for the query
select t1.dt date1,
t1.name name1,
t2.dt date2,
t2.name name2,
t1.id
from (select id, dt, name from table1 where name = 'abc') t1
left outer join (select id, dt, name from table1 where name = 'def') t2 on (t1.id = t2.id)
where t1.name = 'abc'
order by t1.id;
DATE1 NAME1 DATE2 NAME2 ID
---------- ----- ---------- ----- ----------
13/07/2015 abc 14/07/2015 def 1
13/07/2015 abc 2
13/07/2015 abc 15/07/2015 def 3