2013-01-04 3 views
0

Я хочу добавить время в SQL Server. У меня есть столбец checktime в базе данных, который является типом данных datetime. Я хочу добавить время из столбца checktime. Как я могу это сделать ??Добавление времени в SQL Server 2008

Я делаю это вычисление для вычисления общего количества часов работы сотрудника в течение указанного дня.

Моя база данных выглядит следующим образом. Я хочу добавить время от checktime, где checktype = 1 и checktype = 2, а затем вычтите результаты. (checktype = 1 означает регистрацию и checktype = 2 означает выезд)

Как я могу это сделать ??

Id  EmpId    CheckTime        CheckType 
--------------------------------------------------------------------------------- 
    3   5    2013-01-03 09:00:15.000       1 
    4   5    2013-01-03 11:00:00.000       2 
    5   5    2013-01-03 11:30:00.000       1 
    6   5    2013-01-03 13:00:00.000       2 
    7   5    2013-01-03 13:30:00.000       1 
    8   5    2013-01-03 16:00:00.000       2 
    9   5    2013-01-03 16:30:00.000       1 
10   5    2013-01-03 18:00:00.000       2 
+0

Можете ли вы подробнее остановиться на этом? Я не понимаю, что вы хотите добавить в контрольное время. –

+0

Что значит добавить время? – Walter

+0

Я хочу получить сумму контрольного времени с checktype = 1 ... (09: 00: 15.000 +11: 30: 00.000 +13: 30: 00.000 + 16: 30: 00.000) –

ответ

1

Это то, что я хотел бы сделать, если я понимаю вас вопрос правильно:

SELECT 
    EmpId, 
    CheckTime, 
    CheckType, 
    ROW_NUMBER() OVER(PARTITION BY EmpId, DATEADD(dd,DATEDIFF(dd,0,cin.CheckTime),0), CheckType ORDER BY CheckTime) AS Seq 
INTO 
    #PreparedTable 
FROM 
    SourceTable 


SELECT 
    cin.EmpId, 
    DATEADD(dd,DATEDIFF(dd,0,cin.CheckTime),0) AS CheckDate, 
    (SUM(DATEDIFF(ss,cin.CheckTime,cout.CheckTime))/3600.0) AS HoursWorked 
FROM 
    #PreparedTable cin 
JOIN 
    #PreparedTable cout 
    ON (cin.EmpId = cout.EmpID) 
    AND (DATEDIFF(dd,cin.CheckTime,cout.CheckTime) = 0) 
    AND (cin.Seq = cout.Seq) 
    AND (cin.CheckType = 1) 
    AND (cout.CheckType = 2) 
Смежные вопросы