1

Вот мои данныео посещаемости из био-метрическое устройство

|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 

Я использовал этот код:

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 

Результат кода:

|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 

Всякий раз, когда я добавив TotalHours hours Group By WorkDate, он дает неверный ответ.

+2

Человек людей вокруг здесь обязательно, как удар по этой кнопке закрытия. Мне кажется очевидным, что ОП приложил усилия к этому (их первому) вопросу. Нам нужно помочь ОП улучшить вопрос, а не просто голосовать, чтобы закрыть его. –

+1

'Когда я добавляю TotalHours часы Group By WorkDate, он дает неверный ответ.' This does not help.please добавить ваш ожидаемый результат и фактический результат – TheGameiswar

+0

также смотрите здесь, чтобы усовершенствовать вопрос: https: //spaghettidba.com/ 2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

ответ

0

Возможно, что вам нужно, это добавить явную сумму: 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 

(непроверенные, извините, если это не помогает - я знаю очень ограниченный SQL: P)

+1

По крайней мере, ваш SUM должен быть столбцом в запросе. Как указано, это недопустимый синтаксис, потому что СУМ просто плавает в никуда. –

+0

@SeanLange ожидал, что это не сработает, но вы сделали комментарий, который заставил меня хотя бы попытаться помочь. – hauron