Saya pemula dalam pemrograman dan database dan saya akan berterima kasih atas bantuan pada skenario berikut.
Saya menggunakan PHP dengan SQL Server. Saya sedang membangun sistem absensi karyawan dan saya ingin membuat tabel (pivot) dengan bulan sebagai baris dan semua nama hari kerja sebagai kolom (untuk tahun tertentu). Nilai dalam sel akan menjadi jumlah hari (1, 2, 3 ... 31).
Warna latar belakang sel (sudah ada sebagai kolom tabel) menyatakan tipe cuti karyawan. Tabel ini memiliki kolom berikut: employee_id, leave_date, leave_type, leave_type_color
.
Saya ingin mencapai hasil seperti di bawah ini:
Terima kasih.
sql-server
php
pivot
Mike T
sumber
sumber
Jawaban:
Bagian paling kompleks dari ini adalah hanya membangun kalender dalam format itu. Berputar dan mengelilinginya dengan HTML cukup mudah. Pertama, mari kita mulai dengan ini, tabel karyawan Anda dengan tanggal cuti.
leave_type
tampaknya tidak relevan dengan masalah yang dihadapi.Prosedur yang saya buat tampak seperti ini (dan peringatan: diasumsikan
@@DATEFIRST = 7
):Hasil dari panggilan ini:
Terlihat seperti ini (saya berhenti di kolom 7 hari):
Anda harus menambahkan
<table>
/</table>
wrapper sendiri, tetapi inilah hasilnya seperti ketika dimasukkan di antara mereka dan disimpan sebagai HTML (dan tentu saja Anda dapat lebih meningkatkannya dengan CSS):Ketika cuti jatuh pada akhir pekan, warna cuti mengalahkan warna akhir pekan, tetapi itu mudah disesuaikan. Ubah ini:
Untuk ini:
Untuk mengonversi warna dalam format desimal (seperti
65280
) ke RGB-nya (00FF00
), Anda harus melakukan banyak manipulasi. Saya akan mempertimbangkan menyimpannya sebagai RGB hex di tempat pertama, tetapi saya memperbarui solusi di sini dengan sesuatu yang mirip dengan ini:sumber
leave_type_color
kolom angka?Mulailah dengan mempertimbangkan apa yang ingin Anda miliki sebagai kolom, dan itu pada dasarnya “Minggu 1 Hari 1 (Minggu)”, “Minggu 1 Hari 2 (Senin)”, hingga “Minggu 6 Hari 7 (Sabtu)”. Intinya, Hari 1-42. 1 Januari lalu "Minggu 1 Hari 2" Januari. Saya akan menelepon WeekPlusDay ini sekarang.
Untuk mengetahui di mana masing-masing dimulai, pertimbangkan saja bagian hari kerja dari tanggal tersebut.
Kumpulan data Anda kemudian hanya harus memasukkan nilai "WeekPlusDay" itu, dan Anda menampilkan DayOfMonth.
sumber