2

我正在处理出勤报告,我需要从一个表中创建一个 SQL 查询,以返回该月员工净工作时间的出勤情况。一个月中的一天应该是一列,行中应该是员工的总小时数。

该表有 6 列(员工姓名、部门、​​职位、时间、超时和总小时数

从考勤表中选择*的图片

我想返回值如下:

员工姓名 | 第一次 | 第二| 第三| 第四| ...... | 6月30日


雇员 1 | 10:30 | | 10:40 | | 10:10 | | 10:21 |

Days 列应在参数中返回,以便我可以将其添加到水晶报表中。

表结构,如果你能建议请。

提前致谢

4

3 回答 3

0

您可以通过使用交叉表报告来满足您的要求,或者如果您想在 sql 中实现,则使用 pivot

于 2017-07-03T07:10:35.073 回答
0

您可以像这样使用 CASE 语句:

        SELECT EmployeeName,
               (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 1 then totalHours ELSE NULL END) AS "01/06",
               (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 2 then totalHours ELSE NULL END) AS "02/06",
               .
               .
               .
               (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND  EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 30 then totalHours ELSE NULL END) AS "30/06"

FROM Attendance

因此,每天都会创建一个新列。

于 2017-07-02T11:06:39.973 回答
0

我用过这样的东西

        CREATE TABLE `AxsLog` (
`id`    integer NOT NULL UNIQUE,
`Logon` text NOT NULL DEFAULT current_timestamp,
`Logoff`    text NOT NULL DEFAULT current_timestamp,
`Duration`  text NOT NULL DEFAULT 0,
`SysDat`    text NOT NULL DEFAULT current_timestamp,
PRIMARY KEY(`id`) );

您可以轻松地为用户表中的每一行添加一个 FK 列。

保留每个条目的登录 ID,然后在注销时更新该行

UPDATE  AxsLog
Set Duration= (SELECT sum( strftime('%s', logoff) - strftime('%s', logon) ) 
/60 FROM AxsLog WHERE id= 1 )
WHERE id= 1 ; 

要构建报告,请使用类似的东西。此查询仅给出每月的总数。

select total(Duration)  
FROM AxsLog where substr(sysdat,6,2) = 'month' 
于 2017-07-02T11:12:25.780 回答