帮我写一段sql语句计算实际出勤天数
时间: 2023-05-23 13:02:54 浏览: 324
当然,我可以为您编写一段计算实际出勤天数的 SQL 语句。但是,我需要知道更多具体信息,例如,您要计算的日期范围、出勤记录表的结构等等。在了解更多背景信息后,我可以帮助您编写适合您实际需求的 SQL 语句。
相关问题
Oracle 获取当月出勤天数
要获取当月的出勤天数,可以使用如下的SQL查询语句:
```
SELECT COUNT(c.calendar_date) AS 出勤天数
FROM calendar c
CROSS JOIN employee e
LEFT JOIN attendance a ON a.check_date = c.calendar_date AND a.emp_id = e.emp_id
WHERE c.calendar_year = 2021
AND c.calendar_month = 1
AND c.is_work_day = 'Y'
AND (a.id IS NULL OR a.clock_in IS NULL OR a.clock_out IS NULL OR EXTRACT(HOUR FROM a.clock_in) >= 9 OR EXTRACT(HOUR FROM a.clock_out) < 18);
```
这个查询语句中,首先使用交叉连接(CROSS JOIN)将日历表和员工表进行连接,得到一个笛卡尔积,即所有员工每日的打卡记录。然后使用左连接(LEFT JOIN)将出勤表与这个笛卡尔积连接,以保留所有的日历日期。接着通过条件筛选出符合要求的记录,即缺勤、迟到或早退的情况。最后使用COUNT函数统计出勤天数,即出现在结果集中的日历日期的数量。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [SQL案例学习-员工考勤记录](https://blog.csdn.net/liangmengbk/article/details/124154670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
查询2021年1月份应出勤的天数(不考虑节假日),将员工姓名和应出勤天数存为视图table2。(字段:emp_name att_days)
好的,根据您的要求,我来为您解答。
假设我们有两张表,一张是员工信息表employee,另一张是日历信息表calendar。employee表中有员工ID(employee_id)和员工姓名(emp_name)两个字段,calendar表中有日期(date)和是否工作日(is_workday)两个字段。
我们可以通过以下的 SQL 语句创建视图,来查询2021年1月份应出勤的天数,并将员工姓名和应出勤天数存为视图table2:
```
CREATE VIEW table2 AS
SELECT e.emp_name, COUNT(*) AS att_days
FROM employee e, calendar c
WHERE e.employee_id IN (
SELECT DISTINCT employee_id
FROM attendance
) AND c.date >= '2021-01-01' AND c.date <= '2021-01-31' AND c.is_workday = 1
GROUP BY e.emp_name;
```
这个视图包含了员工姓名(emp_name)和应出勤天数(att_days)两个字段。我们使用了employee表和calendar表进行联结,并使用attendance表进行筛选,以计算每个员工在2021年1月份应出勤的天数。具体来说,我们使用了一个子查询来获取在考勤表attendance中出现过的员工ID,然后在calendar表中筛选出2021年1月份的工作日,最后使用GROUP BY来对员工姓名进行汇总。
现在,我们可以通过查询这个视图来获取员工姓名和应出勤天数了。例如,如果我们想要查看这个视图中所有员工的信息,可以使用以下的SQL语句:
```
SELECT *
FROM table2;
```
以上就是根据您的要求,查询2021年1月份应出勤的天数,并将员工姓名和应出勤天数存为视图table2的方法。希望能够对您有所帮助。
阅读全文