【问题标题】: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如果不为空,则根据另一列的数据获取每月总和,因此如果为空,则不会将其添加到总数中
【发布时间】:2016-08-01 07:41:24
【问题描述】:

我有 view_dtr 的列 UndertimeLateAMLatePM 如果是 LateAMLatePM IS NOT NULL,我需要得到 TotalUndertime

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

非常感谢任何帮助和建议。 对不起,我是新手。

【问题讨论】:

  • 能否发布包含 EmpID 和 DatePresent 列的数据?

标签: mysql null sum case calculated-columns


【解决方案1】:

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

您也不需要过滤掉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)

【讨论】:

  • 我想太多了SEC_TO_TIME(SUM(TIME_TO_SEC(Undertime))) 认为 CASE 会帮助我。确实如此,但我只是把它放错了。这次真是万分感谢。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2021-11-05
相关资源
最近更新 更多