2015-01-06 24 views
0

我需要計算一些工人在2014年花費的時間,並且需要按月分組(和)。 每一行應該是這樣的如何按月獲得總工作時間?

Worker 1 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 
Worker 2 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 
Worker 3 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 

我的MySQL數據庫是這樣的:

id_worker (int, primary key), in_datetime (DATETIME), out_datetime (DATETIME) 

有人可以幫我嗎?我只設法計算一年內的總時間。

非常感謝!

+1

其在用於行轉換成列和列返回爲行SQL使用透視和逆透視的場景。但不確定其在MySQL中的等價物。 –

回答

2

試試這個:

SELECT id_worker, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 1 THEN workingTime ELSE 0 END)) AS JanWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 2 THEN workingTime ELSE 0 END)) AS FebWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 3 THEN workingTime ELSE 0 END)) AS MarWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 4 THEN workingTime ELSE 0 END)) AS AprWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 5 THEN workingTime ELSE 0 END)) AS MayWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 6 THEN workingTime ELSE 0 END)) AS JunWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 7 THEN workingTime ELSE 0 END)) AS JulWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 8 THEN workingTime ELSE 0 END)) AS AugWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 9 THEN workingTime ELSE 0 END)) AS SepWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 10 THEN workingTime ELSE 0 END)) AS OctWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 11 THEN workingTime ELSE 0 END)) AS NovWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 12 THEN workingTime ELSE 0 END)) AS DecWorkingTime 
FROM (SELECT id_worker, MONTH(in_datetime) MonthNo, 
      SUM(TIMESTAMPDIFF(SECOND, in_datetime, out_datetime)) AS workingTime 
     FROM tableA 
     WHERE YEAR(in_datetime) = 2014 
     GROUP BY id_worker, MonthNo 
    ) AS A 
GROUP BY id_worker 
+0

它的工作原理!謝謝! – Drew