2013-05-15 13 views
13

Đây là những gì bảng mysql hiện tại của tôi trông giống như:Làm thế nào để transpose hàng bảng mysql vào cột

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 

Bây giờ tôi muốn trả về một tập kết quả được nhóm dựa trên các ngày trong tuần như sau:

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... 

Đây là truy vấn hiện tại của tôi. Nhưng nó chỉ trả lại cú đấm đầu tiên cho mỗi ngày.

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; 

Ai đó có thể giúp tôi với điều này? Cảm ơn Mike

+1

[http://stackoverflow.com/questions/14167719/how-to-transpose-mysql-rows- và-repeat-column-headers] [1] [http: // stackoverflo w.com/questions/12962000/join-tables-and-transpose-columns-and-rows][2] [1]: http://stackoverflow.com/questions/14167719/how-to -transpose-mysql-rows-and-repeat-column-headers [2]: http://stackoverflow.com/questions/12962000/join-tables-and-transpose-columns-and-rows – Tynamo

Trả lời

34
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 

OUTPUT

╔═══════════╦═════════════╦═════════════╦═════════════╦═════════════╗ 
║ 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 ║ 
╚═══════════╩═════════════╩═════════════╩═════════════╩═════════════╝ 
+1

Tuyệt vời! Cảm ơn bạn JW! – dmikester1

+0

Tôi đoán điều này sẽ không hoạt động nếu có nhiều của mỗi PunchEvent mỗi ngày? – dmikester1

+1

ý của bạn là gì đối với 'bội số của mỗi PunchEvent mỗi ngày'? –