Very very difficult query

hi Mateen

Emp Code = Added

;WITH x AS (SELECT ROW_NUMBER() OVER(PARTITION BY emp_code, trans_date ORDER BY time_portion) rn ,emp_code,trans_date,time_portion,status FROM events_gate WHERE status IN ('01','02'))
SELECT
a.emp_code,a.trans_date
,CASE  WHEN a.status='01' THEN a.time_portion END AS timein
,CASE  WHEN a.status='01' AND b.status='02' THEN b.time_portion
       WHEN a.status='02' AND ISNULL(p.status,'')<>'01' THEN a.time_portion END AS timeout
FROM x a LEFT JOIN x b ON b.emp_code=a.emp_code AND b.trans_date=a.trans_date AND b.rn=a.rn+1
         LEFT JOIN x p ON p.emp_code=a.emp_code AND p.trans_date=a.trans_date AND p.rn=a.rn-1
WHERE a.status='01' OR (a.status='02' AND ISNULL(p.status,'')<>'01')
ORDER BY a.emp_code, a.trans_date, a.rn;