SQL Server查询员工明智的月度出勤报告

时间:2012-04-09 06:30:57

标签: sql crystal-reports

我有一个像

这样的结构的数据库

用户:

    usr_id
    usr_fname
    usr_lname
    usr_uname
    usr_pass

organizarion:

    org_id
    org_name
    org_address
    org_tel
    org_web
    org_email
    org_cat
    org_desc

部门:

    dpt_id
    dpt_name
    dpt_desc

部分:

    sec_id
    sec_dpt_id
    sec_name
    sec_desc

名称:

    dsg_id
    dsg_sec_id
    dsg_name
    dsg_desc

雇员:

    emp_id
    emp_fname
    emp_lname
    emp_phone
    emp_email
    emp_addr
    emp_join_dt
    emp_salary
    emp_card_no
    emp_dsg_id
    emp_sft_id

移:

    sft_id
    sft_name
    sft_from
    sft_to
    sft_desc

叶:

    lev_id
    lev_emp_id
    lev_frm
    lev_to
    lev_desc

假期:

    hld_id
    thl_tp_id
    hld_st_dt
    hld_end_dt
    hld_cmnt

holiday_types:

    hld_tp_id
    hld_tp_name
    hld_tp_desc

出勤:

    att_id
    att_emp_id
    att_time
    att_date
    att_dir

任何人都可以帮我查询生成员工明智的月度出勤报告,其中每个日期的时间和时间都会被记录,并且缺席的“缺席”会被写入吗?

我的报告将是这样的:

Date        Attendance     Shift    In time      Out time
---------------------------------------------------------------------
   1        Present          A     12:40 PM      06:40 PM
   2        Absent           A       N/A           N/A
   3
   .
   .
   .
  31        Present          B     07:00 PM      11:00 PM
---------------------------------------------------------------------
Total      

到目前为止我已经完成了:

select att_date, att_time as in_time, shifts.sft_name from attendance
    join employee on (attendance.att_emp_id = employee.emp_id)
    join shifts on (employee.emp_sft_id = shifts.sft_id)
where att_dir = 'In' and
att_time <= (
    select sft_from from shifts
    where sft_id = (
        select emp_sft_id from employee
        where emp_id = 5
    )
) and
att_date between '2012-04-01' and DATEADD(MONTH,1,'2012-04-01') and
att_date not in(
    select hld_dt from holidays
)

但我需要一个月的所有日期列表,此查询检索到的数据应放在该日期的行上。 请帮助......我非常需要它。

2 个答案:

答案 0 :(得分:0)

查看Handling non existent values in sql query expression for ssrs chart

你需要一个包含日期的表来使这项工作(或者你可以使用存储过程/公用表表达式或其他方法来动态生成日期)。

答案 1 :(得分:0)

您需要查看报告,查看包含,员工表,考勤表,薪水或支付表(如果有),以及您的班次表,查看视图并将该视图调用到报表,并创建功能在报告查看器中并提供查询以从该视图中进行选择,如果您需要任何帮助,请与我们联系。