如果它不为空,则根据另一列的数据获取每月总和,因此如果它为空,则不会将其添加到总计中
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_dtr
列 Undertime
、LateAM
和 LatePM
如果 LateAM
或 LatePM
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 = 305001
的 TotalUndertime
应该只是 00:35:00
而 EmpID = 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)
非常感谢任何帮助和建议。
抱歉成为新手。
CASE
SUM()
里面需要做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)
我有 view_dtr
列 Undertime
、LateAM
和 LatePM
如果 LateAM
或 LatePM
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 = 305001
的 TotalUndertime
应该只是 00:35:00
而 EmpID = 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)
非常感谢任何帮助和建议。 抱歉成为新手。
CASE
SUM()
里面需要做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)