Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

cột mới để tính thời gian làm thêm giờ

Hãy thử cái này thay thế:

with times as (
SELECT    t1.EmplID
        , t3.EmplName
        , min(t1.RecTime) AS InTime
        , max(t2.RecTime) AS [TimeOut]
        , cast(min(t1.RecTime) as datetime) AS InTimeSub
        , cast(max(t2.RecTime) as datetime) AS TimeOutSub
        , t1.RecDate AS [DateVisited]
FROM  AtdRecord t1 
INNER JOIN 
      AtdRecord t2 
ON    t1.EmplID = t2.EmplID 
AND   t1.RecDate = t2.RecDate
AND   t1.RecTime < t2.RecTime
inner join 
      HrEmployee t3 
ON    t3.EmplID = t1.EmplID 
group by 
          t1.EmplID
        , t3.EmplName
        , t1.RecDate
)
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,convert(char(5),cast([TimeOutSub] - InTimeSub as time), 108) totaltime
,convert(char(5), case when TimeOutSub - InTimeSub >= '08:01' then 
cast(TimeOutSub - dateadd(hour, 8, InTimeSub) as time) else '00:00' end, 108) as overtime
FROM times


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy văn bản được phân tách bằng dấu phẩy tương ứng cho một chuỗi mã được phân tách bằng dấu phẩy?

  2. Cách xác định khoảng cách đầu tiên trong nhiều phạm vi ngày bắt đầu và ngày kết thúc cho từng thành viên riêng biệt trong T-SQL

  3. Làm cách nào để giữ một phiên bản kết nối SQL Server mở cho nhiều yêu cầu trong C #?

  4. Tại sao tôi không thể sử dụng bí danh cho một tổng thể trong mệnh đề có?

  5. làm thế nào để tách và chèn dữ liệu CSV vào một bảng mới trong một câu lệnh?