Convert selected column values to another row usin

2020-05-09 23:15发布

问题:

I am making a simple time in and time out system.. i have 3 pairs of in and outs. p_id(person_id)

TableA

p_id  time_id      status            timestamp
1         1           in        2013-12-18 15:44:09
2         2           in        2013-12-18 16:23:19
1         3           out       2013-12-18 18:31:11
1         4           in        2013-12-18 18:50:11
3         5           out       2013-12-18 19:20:16
1         6           out       2013-12-18 19:50:11
2         7           out       2013-12-18 19:51:19
1         8           in        2013-12-19 07:51:19
1         9           out       2013-12-19 12:00:19
1         10          in        2013-12-19 01:00:19
1         11          out       2013-12-19 05:30:19
1         12          in        2013-12-19 07:51:19
1         13          out       2013-12-19 11:00:19

Into Table Result one row for the same date

id status     timestamp        status     timestamp       status     timestamp          status      timestamp          status     timestamp       status      timestamp
1    in   2013-12-18 15:44:09   out   2013-12-18 18:31:11  in    2013-12-18 18:50:11    out     2013-12-18 19:50:11
2    in   2013-12-18 16:23:19   out   2013-12-18 19:51:19  
3                               out   2013-12-18 19:20:16
1    in   2013-12-19 07:51:19   out   2013-12-19 12:00:19  in    2013-12-19 01:00:19    out     2013-12-19 05:30:19     in    2013-12-19 07:51:19   out       2013-12-19 11:00:19

回答1:

I guess you want something like this:

SELECT a1.id, a.1status, a1.timestamp, a2.status, a2.timetstamp
FROM timetable a1
LEFT JOIN timetable a2 ON a2.id=a1.id AND a2.status = 'out'
WHERE a1.status = 'in'

To have a row with only an out-value doesn't make any sense to me.



回答2:

try this query,

select t1.id,t2.status as IN_Status,t2.timestamp as IN_Time,t3.status as OUT_Stats,t3.timestamp as OUT_Time
  from table1 t1 
   left join table1 t2 on (t1.id=t2.id and t2.status ='in')
   left join table1 t3 on (t1.id=t3.id and t3.status ='out') 
   group by t1.id;

Check the example

SQL Fiddle Example