佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2024|回复: 7

怎么写这个SQL?HR system来的。

[复制链接]
发表于 8-7-2013 04:48 PM | 显示全部楼层 |阅读模式
Table Schedule
SCHID  TEXT
SCHNAME TEXT
BEGINDAY DATETIME
TIMEID TEXT

Table TimeTable
TIMEID TEXT
TIMENAME TEXT
INTIME TEXT
OUTTIME TEXT

Table UserShift
USERID TEXT
SCHID TEXT
BEGINDATE DATETIME
ENDDATE DATETIME

Table CheckLog
LOGID TEXT
USERID TEXT
CHECKTIME DATETIME
CHECKTYPE TEXT

是Access DB。
可能我的DB field弄到不好。

需要写SQL计算员工有没有迟到。就是不懂怎么弄DB field还有写SQL来找。


回复

使用道具 举报


ADVERTISEMENT

发表于 12-7-2013 10:47 PM | 显示全部楼层
一頭霧水
不肯定,好像database design有點特別.
Schedule 和 TimeTable 合成1個table會有問題嗎?
UserShift 看來像是 user 的值勤表.
CheckLog 坦白講不太懂,可能是user實際上班時間.

用CheckLog 比較 (UserShift join TimeTable join Schedule).
Schedule 給你 Date, Timetable 給你 工作時間.

亂亂猜的
回复

使用道具 举报

 楼主| 发表于 13-7-2013 02:25 PM | 显示全部楼层
谢谢你哦。

schedule
Mon - TimeID
Tue - TimeID
。。。

如果不用normalise就容易写
回复

使用道具 举报

发表于 17-7-2013 03:34 PM | 显示全部楼层
没有资料,所以随便猜。

看起来

一个 Schedule 只有一个 TimeTable
而 UserShift 好像是每一天都有一个不同的 SchID

这样设计可能在安排工作会麻烦。

个人看法:
User A -> schedule A
User B -> schedule A
User C -> schedule A
User D -> schedule B

而每一个 schedule 可以有多个 TimeTable

Schedule A 的 TimeTable
mon 0800 - 1800
...
fri 0800 - 1800
sat 0800 - 1200
sun (off)

这样当 Schedule A 改时间,或者确定轮班表,
A, B, C 三个人就直接有新的工作表。

只有当天确定了工作,或者调换时间,才更改当天某人的 UserShift
另外,由于 INTIME, OUTTIME 也可能会改,所以也应该记录在 UserShift

如果要 report 容易,最后把资料都 Update 在 UserShift 就会容易很多

当然也有其他不同的做法。

本帖最后由 flashang 于 17-7-2013 03:41 PM 编辑

回复

使用道具 举报

 楼主| 发表于 18-7-2013 01:55 PM | 显示全部楼层
SELECT DISTINCT Emp.UserID, Emp.EmpName, Schedule.Mon, TimeTable.TimeName, TimeTable.OnTime, TimeTable.OffTime
FROM TimeTable, (UserShift INNER JOIN Schedule ON UserShift.SchID = Schedule.SchID) INNER JOIN Emp ON Schedule.UserID = Emp.UserID
WHERE (((Emp.UserID)=[Schedule].[UserID]) AND ((Schedule.Mon)=[TimeTable].[TimeID]));


回复

使用道具 举报

发表于 19-7-2013 03:32 PM | 显示全部楼层
rcyaw2 发表于 18-7-2013 01:55 PM
SELECT DISTINCT Emp.UserID, Emp.EmpName, Schedule.Mon, TimeTable.TimeName, TimeTable.OnTime, TimeTab ...

不知道这个 算不算是回复上面的许多猜测。。。
什么说明都没有。

随便猜猜。

如果 Schedule.mon .tue .wed .....
是记录一个星期的时间表,那么只能以星期来安排工作。
而遇到其他非 7 天方式的组合,这个方法就不适合。

其实,不管怎么样做,最重要是有好用的 report
如整下月的执勤表,
整个月不同部门、个人的工作量,
还有迟到早退扣钱、加班费、伙食、车费、勤工费、薪水。



回复

使用道具 举报

Follow Us
发表于 19-7-2013 10:58 PM | 显示全部楼层
rcyaw2 发表于 18-7-2013 01:55 PM
SELECT DISTINCT Emp.UserID, Emp.EmpName, Schedule.Mon, TimeTable.TimeName, TimeTable.OnTime, TimeTab ...

問題還沒解決嗎?
回复

使用道具 举报

发表于 7-11-2013 12:29 PM | 显示全部楼层
所有原理都一樣
先定master  employee , working day ,role , company , work status e.g contract , perm
在定customer table , epf , ot , expense claim ,
最重要reverse
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-9-2025 02:12 AM , Processed in 0.154809 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表