none
Laporan Absensi

    Question

  • Saya mempunyai dua tabel di ms. acces yaitu tabel absensi dan tabel periode.

    Di tabel absensi saya mempunyai field:

    - NIK

    - Nama

    - Bulan

    - Tahun

    - Tanggal

    - Jam Masuk

    - Jam Pulang

    dan ditabel periode saya mempunyai field :

    - Bulan

    - Tahun

    - Hari

    - Tanggal

    saya ingin bertanya, bagaimanakah mengkoneksikan antara tanggal di tabel absensi dengan tanggal di tabel periode namun data dapat di group berdasarkan NIK / Nama ?

    laporan yang saya inginkan seperti ini :Saya sudah penah melakukan dengan coding menggunakan Left Join namun ketika di group laporannya tidak bisa keluar tanggal keseluruhannya. Laporan yang saya pakai data report ataupun crystal report.

    Terima Kasih.

    Wednesday, January 02, 2013 2:28 AM

Answers

  • Halo Om Ario Verdinanto,

    Untuk kasus Anda, sebetulnya cukup mudah kok. Sebetulnya Anda tidak perlu membuat tabel PERIODE. Dikarenakan yang perlu Anda lakukan hanyalah mengutak-ngutik tabel ABSENSI-nya aja. Supaya lebih mudah dicerna, disarankan ANDA sudah menguasai beberapa syntax SQL. Sebagai bukti, saya mencoba simulasi sendiri, berikut ini tabel ABSENSI versi saya:

    Langkah Pertama:

    (1) Nama Field: NIK , Jenis: Number, Index: Ya, tapi bukan primary.

    Nama Field: Nama , Jenis: Text

    Nama Field: Tgl Kerja , Jenis: Date/Time, Index: Ya, tapi bukan primary.

    Nama Field: Jam Masuk , Jenis: Date/Time

    Nama Field: Jam Keluar , Jenis: Date/Time

    Catatan: Database yang saya gunakan MS Access. Tabel saya simpan dengan nama Absensi.

    Langkah Kedua:

    (2a) Buatlah sebuah query, beri nama Detil Absensi pada query tersebut. (2b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT Absensi.NIK, Absensi.Nama, Format([tgl kerja],'yyyy') AS Tahun, Format([tgl kerja],'mmmm') AS Bulan, Absensi.[Tgl Kerja], Absensi.[Jam Masuk], Absensi.[Jam Pulang] FROM Absensi

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Detil Absensi.

    Langkah Ketiga:

    (3a) Buat lagi query, beri nama Grouping Absensi pada query tersebut. Saya beri nama Grouping dikarenakan akan ada field yang di-grouping, yaitu Tahun dan Bulan dari query Detil Absensi. (3b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT [Detil Absensi].NIK, [Detil Absensi].Tahun, [Detil Absensi].Bulan, Count([Detil Absensi].[tgl kerja]) AS Jumlah FROM [Detil Absensi] GROUP BY [Detil Absensi].NIK, [Detil Absensi].Tahun, [Detil Absensi].Bulan ORDER BY [Detil Absensi].Tahun, [Detil Absensi].Bulan

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Grouping Absensi.

    Langkah Keempat:

    (4a) Buatlah lagi query, beri nama Absensi Lengkap pada query tersebut. Saya beri nama Lengkap dikarenakan akan ada dua query yang digunakan, yaitu Detil Absensi dan Grouping Absensi. Dan tentunya dari kedua query tersebut harus saling dihubungkan, yaitu antara field NIK, Tahun, dan Bulan. (4b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT [Detil Absensi].NIK, [Detil Absensi].Nama, [Detil Absensi].Tahun, [Detil Absensi].Bulan, [Detil Absensi].[Tgl Kerja], [Detil Absensi].[Jam Masuk], [Detil Absensi].[Jam Pulang] FROM [Grouping Absensi] INNER JOIN [Detil Absensi] ON ([Grouping Absensi].Bulan = [Detil Absensi].Bulan) AND ([Grouping Absensi].Tahun = [Detil Absensi].Tahun) AND ([Grouping Absensi].NIK = [Detil Absensi].NIK)

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Absensi Lengkap.

    Langkah Kelima:

    Untuk reportnya, saya masih menggunakan report yang ada pada MS Access. Hal ini dilakukan untuk menguji keakuratan outpunya terlebih dahulu. (5a) Pada saat membuat report, Anda hanya perlu menggunakan query Absensi Lengkap sebagai Report Source-nya. (5b) Karena report masih refresh, maka yang perlu anda lakukan hanyalah membuat grouping, sebanyak 2 kali, yaitu grouping level pertama adalah Tahun, dan grouping level kedua adalah Bulan. (5c) Berhubung disini recordnya cuma ala kadarnya, mungkin outputnya tidak memuaskan keinginan Anda.


    • Edited by Wahyu VB .Net Thursday, January 17, 2013 6:32 PM revisi
    • Proposed as answer by Iga Mentari Thursday, January 17, 2013 9:01 PM
    • Marked as answer by Ario Verdinanto Friday, April 26, 2013 5:26 AM
    Thursday, January 17, 2013 6:30 PM

All replies

  • Hi Ario Verdinanto

    Selamat datang di forum MSDN

    Mohon maaf karena keterlambatan membalas forum ini

    Jika date relasi ke kolom ( NIK, Nama, Bulan, Tahun, Tanggal,  Jam Masuk dan Jam Pulang) di tabel absensi, foreign keys mereverensi ke tabel periode kolom tanggal, coba gunakan kode dibawah

    Tapi jika situasi berbeda coba berikan contoh relasi tabel nya

    Note: Kita mengubah ( NIK, Nama, Bulan, Tahun, Tanggal, Jam Masuk dan Jam Pulang) menjadi ( ID number, Name, Month, Year, Date, Time login and Time logut)

    create table  periode
    (
         ID int primary key,
         [date] date
    )
    create table absensi 
    (
         ID int,
         Name varchar(50),
         FID int foreign key references periode(ID)
    )
    insert into periode values (1,GETDATE());
    insert into periode values (2,DATEADD(day,1,GETDATE()));
    insert into absensi values (1,'a',1);
    insert into absensi values (2,'b',2);
    insert into absensi values (3, 'c',2);
    insert into absensi values (1, 'a',2);
    --select *
    --from periode
    --select * 
    --from absensi
    ;with Temp as
    (select a.Name as Name,p.date as date
    from absensi a
    inner join periode p
    on a.FID = p.id)
    select t1.name, 
    STUFF(
    (select ','+CONVERT(VARCHAR(10),date,110) from temp as t2 where t1.Name = t2.Name for xml path('')),1,1,''
    ) as Dates
    from temp as t1
    group by t1.Name

    Selamat mencoba, jika masih mengalami kendala, harap membalas forum ini

    Terima kasih


    Andy Nugraha

    TechNet Community Support

    Thursday, January 10, 2013 6:51 AM
    Moderator
  • Halo Om Ario Verdinanto,

    Untuk kasus Anda, sebetulnya cukup mudah kok. Sebetulnya Anda tidak perlu membuat tabel PERIODE. Dikarenakan yang perlu Anda lakukan hanyalah mengutak-ngutik tabel ABSENSI-nya aja. Supaya lebih mudah dicerna, disarankan ANDA sudah menguasai beberapa syntax SQL. Sebagai bukti, saya mencoba simulasi sendiri, berikut ini tabel ABSENSI versi saya:

    Langkah Pertama:

    (1) Nama Field: NIK , Jenis: Number, Index: Ya, tapi bukan primary.

    Nama Field: Nama , Jenis: Text

    Nama Field: Tgl Kerja , Jenis: Date/Time, Index: Ya, tapi bukan primary.

    Nama Field: Jam Masuk , Jenis: Date/Time

    Nama Field: Jam Keluar , Jenis: Date/Time

    Catatan: Database yang saya gunakan MS Access. Tabel saya simpan dengan nama Absensi.

    Langkah Kedua:

    (2a) Buatlah sebuah query, beri nama Detil Absensi pada query tersebut. (2b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT Absensi.NIK, Absensi.Nama, Format([tgl kerja],'yyyy') AS Tahun, Format([tgl kerja],'mmmm') AS Bulan, Absensi.[Tgl Kerja], Absensi.[Jam Masuk], Absensi.[Jam Pulang] FROM Absensi

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Detil Absensi.

    Langkah Ketiga:

    (3a) Buat lagi query, beri nama Grouping Absensi pada query tersebut. Saya beri nama Grouping dikarenakan akan ada field yang di-grouping, yaitu Tahun dan Bulan dari query Detil Absensi. (3b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT [Detil Absensi].NIK, [Detil Absensi].Tahun, [Detil Absensi].Bulan, Count([Detil Absensi].[tgl kerja]) AS Jumlah FROM [Detil Absensi] GROUP BY [Detil Absensi].NIK, [Detil Absensi].Tahun, [Detil Absensi].Bulan ORDER BY [Detil Absensi].Tahun, [Detil Absensi].Bulan

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Grouping Absensi.

    Langkah Keempat:

    (4a) Buatlah lagi query, beri nama Absensi Lengkap pada query tersebut. Saya beri nama Lengkap dikarenakan akan ada dua query yang digunakan, yaitu Detil Absensi dan Grouping Absensi. Dan tentunya dari kedua query tersebut harus saling dihubungkan, yaitu antara field NIK, Tahun, dan Bulan. (4b) Untuk mempercepat, pada query, segera Anda rubah tampilannya menjadi SQL View, setelah itu masukkan kode berikut:

    SELECT [Detil Absensi].NIK, [Detil Absensi].Nama, [Detil Absensi].Tahun, [Detil Absensi].Bulan, [Detil Absensi].[Tgl Kerja], [Detil Absensi].[Jam Masuk], [Detil Absensi].[Jam Pulang] FROM [Grouping Absensi] INNER JOIN [Detil Absensi] ON ([Grouping Absensi].Bulan = [Detil Absensi].Bulan) AND ([Grouping Absensi].Tahun = [Detil Absensi].Tahun) AND ([Grouping Absensi].NIK = [Detil Absensi].NIK)

    Jangan lupa untuk menyimpannya, dan kemudian tutuplah jendela query Absensi Lengkap.

    Langkah Kelima:

    Untuk reportnya, saya masih menggunakan report yang ada pada MS Access. Hal ini dilakukan untuk menguji keakuratan outpunya terlebih dahulu. (5a) Pada saat membuat report, Anda hanya perlu menggunakan query Absensi Lengkap sebagai Report Source-nya. (5b) Karena report masih refresh, maka yang perlu anda lakukan hanyalah membuat grouping, sebanyak 2 kali, yaitu grouping level pertama adalah Tahun, dan grouping level kedua adalah Bulan. (5c) Berhubung disini recordnya cuma ala kadarnya, mungkin outputnya tidak memuaskan keinginan Anda.


    • Edited by Wahyu VB .Net Thursday, January 17, 2013 6:32 PM revisi
    • Proposed as answer by Iga Mentari Thursday, January 17, 2013 9:01 PM
    • Marked as answer by Ario Verdinanto Friday, April 26, 2013 5:26 AM
    Thursday, January 17, 2013 6:30 PM
  • Terimakasih atas jawabannya. Sangat membantu sekali
    Friday, January 25, 2013 4:13 AM
  • Terimakasih atas jawabannya. Sangat membantu sekali
    Friday, January 25, 2013 4:13 AM
  • Halo Om Ario Verdinanto,

    Saya sangat senang sekali kalo om sudah mendapatkan jawaban. Walau begitu mohon om beri tanda jawaban pada pertanyaan yang telah om ajukan ini. Harap maklum ya om, masalahnya diantara semua forum, hanya forum Visual Basic aja, yang para penanyanya rada-rada kayak hantu, habis nanya langsung lenyap. Sehingga banyak jawaban yang telah diajukan jadi gak jelas statusnya, karena si penanya sudah lenyap gak ta'u kemana, hehehe

    Saturday, February 09, 2013 9:19 AM