查看: 2024|回复: 7
|
怎么写这个SQL?HR system来的。
[复制链接]
|
|
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来找。
|
|
|
|
|
|
|
|
发表于 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
如整下月的执勤表,
整个月不同部门、个人的工作量,
还有迟到早退扣钱、加班费、伙食、车费、勤工费、薪水。
|
|
|
|
|
|
|
|
发表于 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 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|