Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dapatkan Semua pukulan masuk dan keluar untuk setiap karyawan?

Anda bisa menggunakan subselect atau CTE untuk mendapatkan data yang dipesan oleh karyawan dan menggunakannya sebagai tabel data utama. Sesuatu yang mirip (sesuaikan jika perlu) dengan ini:

;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

Penjelasan:CTE 'dipesan' memang menunjukkan entri/keluar karyawan yang dipesan berdasarkan tanggal. ROW_NUMBER disetel ulang untuk setiap karyawan (saya berasumsi emp_reader_id memang berisi id karyawan) karena PARTITION BY .

Setelah saya mendapatkan counter untuk setiap karyawan, saya menggabungkan setiap pukulan untuk setiap karyawan (kondisi pertama di gabung kiri) dengan pukulan berikutnya untuk karyawan itu (kondisi kedua di gabung kiri). Dengan begitu saya bisa menunjukkan kolom masuk dan keluar (pukulan berikutnya).

Setelah Anda mendapatkan kolom masuk dan keluar dalam data Anda, Anda mungkin ingin mengecualikan beberapa data (baris ganjil setiap karyawan adalah baris yang Anda inginkan) menambahkan 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. Saya Membutuhkan Daftar Negara di T-SQL

  2. Perbedaan Antara sys.sql_modules, sys.system_sql_modules, &sys.all_sql_modules di SQL Server

  3. Tutorial SQL Server – Semua yang Anda Butuhkan Untuk Menguasai Transact-SQL

  4. Masukkan Massal Sql Server jutaan catatan

  5. SQL UNION UNTUK kolom keluaran nama XML