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

Nhận Tất cả các cú đấm vào và ra cho mỗi nhân viên?

Bạn có thể sử dụng một lựa chọn con hoặc CTE để lấy dữ liệu theo thứ tự của nhân viên và sử dụng nó làm bảng dữ liệu chính. Một cái gì đó tương tự (điều chỉnh nó nếu cần thiết) với cái này:

;with ordered as (
select 
    emp_reader_id as empId,
    CONVERT(DATE, dt) as Punch,
    Row_number()
     OVER (PARTITION BY emp_reader_id ORDER BY CONVERT(DATE, dt) ASC) as OrderedPunch
from trnevents
)
SELECT 
    entered.empId, 
    entered.Punch as PunchIn,
    exited.Punch as PunchOut
from
    ordered as entered
    left join ordered as exited on 
        entered.empId = exited.empId
        and entered.OrderedPunch + 1 = exited.OrderedPunch

Giải thích:CTE 'được đặt hàng' hiển thị các lần ra / vào của nhân viên được sắp xếp theo ngày. ROW_NUMBER được đặt lại cho từng nhân viên (tôi giả sử emp_reader_id có chứa id nhân viên) vì PARTITION BY .

Khi tôi đã nhận được bộ đếm cho mỗi nhân viên, tôi tham gia từng cú đấm cho từng nhân viên (điều kiện đầu tiên trong phép nối bên trái) với cú đấm tiếp theo cho nhân viên đó (điều kiện thứ hai trong phép nối bên trái). Bằng cách đó, tôi có thể hiển thị cột mục nhập và lối ra (cú đấm tiếp theo).

Sau khi bạn có các cột vào và cột ra trong dữ liệu của mình, bạn có thể muốn loại trừ một số dữ liệu (các hàng lẻ của mỗi nhân viên là các hàng bạn muốn) thêm WHERE entered.OrderedPunch %2 = 1




  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 để nhập tệp .bak SQL Server vào MySQL?

  2. Tính toán tổng số chạy / số dư chạy

  3. Các bản sửa lỗi cho sự cố tạo lại chỉ mục trực tuyến SQL Server 2012 &2014

  4. Sự khác biệt giữa sys.sql_modules, sys.system_sql_modules và sys.all_sql_modules trong SQL Server

  5. Làm cách nào để khóa bảng khi đọc, sử dụng Entity Framework?