복붙노트

[SQL] 어떻게 열로 MySQL의 테이블 행을 바꾸어하기

SQL

어떻게 열로 MySQL의 테이블 행을 바꾸어하기

여기에 내 현재 MySQL의 테이블 모습입니다 :

PunchID EmpID   PunchEvent  PunchDateTime
1       0456    clockin     5/14/2013 8:36:26 AM
48      0456    breakout    5/14/2013 12:01:29 PM
53      0456    breakin     5/14/2013 12:28:31 PM
54      0456    clockout    5/14/2013 2:28:33 PM
57      0456    clockin     5/15/2013 7:38:34 AM
58      0456    breakout    5/15/2013 7:38:39 AM
59      0456    breakin     5/15/2013 7:38:41 AM
60      0456    clockout    5/15/2013 7:38:42 AM

지금은 이렇게 같은 요일에 따라 그룹화 된 결과 집합을 반환하려면 :

Day       ClockIn      BreakOut    BreakIn      ClockOut
Tuesday   8:36:26 AM  12:01:29 PM  12:28:31 PM  2:28:33 PM
Wednesday 7:38:34 AM  etc, etc...

이것은 나의 현재 쿼리입니다. 그러나 각 일에 대한 첫 번째 펀치를 반환합니다.

SELECT DATE_FORMAT(PunchDateTime, '%W') as day, PunchEvent, DATE_FORMAT(PunchDateTime, '%l:%m:%s %p') as time FROM timeclock_punchlog WHERE EmpID = '0456' GROUP BY DATE(PunchDateTime) ORDER BY PunchDateTime ASC;

이와 캔 사람의 도움 나? 감사 마이크

해결법

  1. ==============================

    1.

    SELECT  DATE_FORMAT(PunchDateTime, '%W') DAY,
            MAX(CASE WHEN PunchEvent = 'ClockIn' THEN DATE_FORMAT(PunchDateTime, '%r') END) ClockIn,
            MAX(CASE WHEN PunchEvent = 'BreakOut' THEN DATE_FORMAT(PunchDateTime, '%r') END) BreakOut,
            MAX(CASE WHEN PunchEvent = 'BreakIn' THEN DATE_FORMAT(PunchDateTime, '%r') END) BreakIn,
            MAX(CASE WHEN PunchEvent = 'ClockOut' THEN DATE_FORMAT(PunchDateTime, '%r') END) ClockOut
    FROM    tableName
    WHERE   EmpID = 456
    GROUP   BY DATE_FORMAT(PunchDateTime, '%W')
    ORDER   BY PunchDateTime
    

    산출

    ╔═══════════╦═════════════╦═════════════╦═════════════╦═════════════╗
    ║    DAY    ║   CLOCKIN   ║  BREAKOUT   ║   BREAKIN   ║  CLOCKOUT   ║
    ╠═══════════╬═════════════╬═════════════╬═════════════╬═════════════╣
    ║ Tuesday   ║ 08:36:26 AM ║ 12:01:29 PM ║ 12:28:31 PM ║ 02:28:33 PM ║
    ║ Wednesday ║ 07:38:34 AM ║ 07:38:39 AM ║ 07:38:41 AM ║ 07:38:42 AM ║
    ╚═══════════╩═════════════╩═════════════╩═════════════╩═════════════╝
    
  2. from https://stackoverflow.com/questions/16568228/how-to-transpose-mysql-table-rows-into-columns by cc-by-sa and MIT license