如果它不为空,则根据另一列的数据获取每月总和,因此如果它为空,则不会将其添加到总计中

getting the sum per month based on the data of another column if it is not null hence if it is null then it won't be added to the total

我有 view_dtrUndertimeLateAMLatePM 如果 LateAMLatePM IS NOT NULL.

|  EmpID  | DatePresent  |  Undertime  |  LateAM  |  LatePM  |
|  305001 | 2016-04-01   |  00:10:00   | 01:00:00 | 00:12:00 |
|  305001 | 2016-04-02   |  00:15:00   |          |          |
|  305001 | 2016-04-03   |  00:20:00   | 00:05:00 |          |
|  305001 | 2016-04-04   |  00:05:00   |          | 00:01:00 |
|  305002 | 2016-04-01   |  00:01:00   |          | 00:10:00 |
|  305002 | 2016-04-02   |  00:10:00   |          |          |
|  305002 | 2016-04-03   |  00:10:00   | 00:02:00 | 00:03:00 |

EmpID = 305001TotalUndertime 应该只是 00:35:00EmpID = 305002 应该是 00:11:00。我继续使用 CASE 语句获取全部金额。

CASE WHEN LateAM IS NOT NULL AND Undertime IS NOT NULL 
        THEN SEC_TO_TIME(SUM(TIME_TO_SEC(Undertime))) 
    WHEN LatePM IS NOT NULL AND Undertime IS NOT NULL 
        THEN SEC_TO_TIME(SUM(TIME_TO_SEC(Undertime))) 
    ELSE NULL 
END AS TotalUndertime 
FROM view_dtr 
GROUP BY EmpID, MONTH(DatePresent)

非常感谢任何帮助和建议。 抱歉成为新手。

CASESUM()里面需要做SUM(),因为选择后会发生聚合。

您也不需要过滤掉 Undertime = NULL,因为它们在求和时会被忽略。

SELECT SEC_TO_TIME(SUM(CASE WHEN LateAM IS NOT NULL OR LatePM IS NOT NULL
                            THEN TIME_TO_SEC(UnderTime)
                       END)) AS TotalUndertime
FROM view_dtr
GROUP BY EmpID, MONTH(DatePresent)