सरल एकत्रीकरण करना चाहिए:
select id,
max(case when flag = 'I' then datetime end) indatetime,
max(case when flag = 'O' then datetime end) outdatetime
from t
group by id;
या आप चाहें तो पिवट का उपयोग कर सकते हैं:
select id, [I] indatetime, [O] outdatetime
from t pivot (
max(datetime) for flag in ([I],[O])
) as p