1

Voici mes donnéesdossier de présence du dispositif bio-métrique

|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 

J'ai utilisé ce code:

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 

Le résultat du code est:

|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 

Chaque fois que je suis ajouter TotalHours heures Group By WorkDate, il donne une réponse incorrecte.

+2

gens homme autour ici sûr de frapper à ce bouton de fermeture. Il me semble évident que le PO a fait des efforts dans cette (leur première) question. Nous devons aider le PO à améliorer la question au lieu de simplement voter pour la fermer. –

+1

'Chaque fois que j'ajoute TotalHours heures Groupe par WorkDate, il donne une réponse incorrecte.Cela n'aide pas.Veuillez ajouter votre résultat attendu et résultat réel – TheGameiswar

+0

également chercher ici pour améliorer la question: https: //spaghettidba.com/ 2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

Répondre

0

Peut-être ce que vous avez besoin est d'ajouter une somme explicite: 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 

(non testé, désolé si cela ne fonctionne pas - je sais SQL très limité: P)

+1

À tout le moins, votre SUM doit être une colonne dans la requête. Comme indiqué, il s'agit d'une syntaxe invalide, car la SUM ne fait que flotter dans les terres de nulle part. –

+0

@SeanLange s'attendait à ce que cela ne fonctionne pas, mais vous avez fait un commentaire qui m'a fait au moins essayer d'aider. – hauron