1

Hier ist meine DatenBesucherrekord von biometrischer Gerät

|Id  |EmpCode |CheckInCheckOutDate  |WorkDate     |InOutMode 
|247 |51   |2017-02-13 20:08:52.000 |2017-02-13 20:08:52.000 |0   
|392 |51   |2017-02-13 22:38:51.000 |2017-02-13 22:38:51.000 |1   
|405 |51   |2017-02-13 22:59:18.000 |2017-02-13 22:59:18.000 |0   
|415 |51   |2017-02-13 23:18:17.000 |2017-02-13 23:18:17.000 |1   
|423 |51   |2017-02-13 23:33:44.000 |2017-02-13 23:33:44.000 |0   
|456 |51   |2017-02-14 01:30:15.000 |2017-02-13 01:30:15.000 |1   
|463 |51   |2017-02-14 02:52:02.000 |2017-02-13 02:52:02.000 |0   
|483 |51   |2017-02-14 05:11:54.000 |2017-02-13 05:11:54.000 |1   
|1034 |51   |2017-02-14 20:09:23.000 |2017-02-14 20:09:23.000 |0   
|1172 |51   |2017-02-14 21:59:23.000 |2017-02-14 21:59:23.000 |1   
|1217 |51   |2017-02-14 22:30:28.000 |2017-02-14 22:30:28.000 |0   
|1238 |51   |2017-02-14 22:49:51.000 |2017-02-14 22:49:51.000 |1   
|1257 |51   |2017-02-14 23:19:10.000 |2017-02-14 23:19:10.000 |0   
|1315 |51   |2017-02-15 05:04:16.000 |2017-02-14 05:04:16.000 |1   
|1323 |51   |2017-02-15 05:05:17.000 |2017-02-14 05:05:17.000 |0   
|1329 |51   |2017-02-15 05:08:17.000 |2017-02-14 05:08:17.000 |1 
|1330 |51   |2017-02-15 05:08:18.000 |2017-02-14 05:08:18.000 |1 

Ich habe diesen Code verwendet:

SELECT EmpCode, 
     CAST(I.CheckInCheckOutDate AS DATE) AS [Date], 
     CAST(I.WorkDate AS DATE) AS WorkDate, 
     CONVERT(VARCHAR(10), I.WorkDate, 108) AS CheckIn, 
     CONVERT(VARCHAR(10), O.WorkDate, 108) AS CheckOut, 
     CAST(DATEDIFF(second,I.WorkDate,O.WorkDate)/3600.0 AS DECIMAL(18,9)) [TotalHours] 
FROM tblAttendance I 
OUTER APPLY (
       SELECT TOP 1 WorkDate,inOutMode FROM tblAttendance t 
       WHERE t.EmpCode = I.EmpCode AND t.WorkDate > I.WorkDate 
       ORDER BY t.WorkDate 
      ) O 

WHERE I.inOutMode = 0 
AND O.inOutMode = 1 and I.empCode=51 

Das Ergebnis des Code ist:

|EmpCode|Date|  |WorkDate |CheckIn |CheckOut |TotalHours 
|51  |2017-02-13 |2017-02-13 |20:08:52 |22:38:51 |2.499722000 
|51  |2017-02-13 |2017-02-13 |22:59:18 |23:18:17 |0.316388000 
|51  |2017-02-13 |2017-02-13 |23:33:44 |05:04:16 |5.508888000 
|51  |2017-02-14 |2017-02-13 |02:52:02 |05:11:54 |2.331111000 
|51  |2017-02-14 |2017-02-14 |20:09:23 |21:59:23 |1.833333000 
|51  |2017-02-14 |2017-02-14 |22:30:28 |22:49:51 |0.323055000 
|51  |2017-02-15 |2017-02-14 |05:05:17 |05:08:17 |0.050000000 

Wann immer ich bin Hinzufügen von TotalHours Stunden Gruppieren nach WorkDate, gibt es falsche Antwort.

+2

Man Menschen um hier sicher wie auf den Knopf drücken. Es liegt auf der Hand, dass das OP sich auf diese (erste) Frage konzentriert hat. Wir müssen dem OP helfen, die Frage zu verbessern, anstatt nur abzustimmen, um es zu schließen. –

+1

'Immer wenn ich TotalHours Stunden Group By WorkDate hinzufügen, gibt es falsche Antwort.' Dies hilft nicht.bitte fügen Sie Ihr erwartetes Ergebnis und das tatsächliche Ergebnis – TheGameiswar

+0

auch hier, um die Frage zu verbessern: https: //spaghettidba.com/ 2015/04/24/how-to-post-auf-sql-question-on-a-public-forum/ – TheGameiswar

Antwort

0

Vielleicht, was Sie brauchen, ist eine explizite Summe hinzuzufügen: http://www.w3resource.com/sql/aggregate-functions/sum-with-group-by.php:

SELECT TOP 1 WorkDate, inOutMode, SUM (TotalHours) FROM tblAttendance t 

WHERE t.EmpCode = I.EmpCode AND t.WorkDate > I.WorkDate 
GROUP BY WorkDate, inOutMode 

ORDER BY t.WorkDate 

(ungetestet, sorry, wenn dies nicht hilft - ich weiß sehr begrenzte SQL: P)

+1

Zumindest Ihre SUM muss eine Spalte in der Abfrage sein. Wie gesagt, ist es eine ungültige Syntax, weil die SUM nur im Nirgendwo landet. –

+0

@SeanLange erwartete, dass es nicht funktionieren würde, aber du hast einen Kommentar abgegeben, der mich zumindest dazu gebracht hat zu helfen. – hauron

Verwandte Themen