2016-08-01 30 views
0

我有view_dtr與列Undertime,LateAMLatePM我需要得到TotalUndertime如果任LateAMLatePMIS NOT NULL獲得基於另一列的數據每月的總和,如果它不爲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 | 

TotalUndertimeEmpID = 305001只應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) 

任何幫助和建議,非常感謝。 很抱歉作爲新手。

+0

你能發佈包括EmpID和DatePresent列的數據嗎? – olegsv

回答

0

您需要做CASE裏面的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) 
+0

我正在推翻這個聲明'SEC_TO_TIME(SUM(TIME_TO_SEC(Undertime)))''認爲CASE會幫助我。它沒有,但我只是把它放錯了。這次真是萬分感謝。我非常感激。 – Clorae

相關問題