挑战高手-排班问题

取昵称麻烦 2017-07-23 11:10:09
数据库为SQL2000
创建表的SQL语句如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DutyShift]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[DutyShift]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Workplace]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Workplace]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[employee]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[employee]
GO

CREATE TABLE [dbo].[DutyShift] (
[DutyShiftID] [int] IDENTITY (1, 1) NOT NULL ,
[DutyShift] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[DutyShiftAB] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Remark] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Workplace] (
[WorkplaceID] [int] IDENTITY (1, 1) NOT NULL ,
[Workplace] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Remark] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[employee] (
[EmployeeID] [int] IDENTITY (1, 1) NOT NULL ,
[FullName] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[WorkplaceID] [int] NOT NULL ,
[Monitor] [bit] NOT NULL ,
[Remark] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

各个表的内容如下:
DutyShift
1 早班监控 A
2 晚班监控 B
3 早班机动 F
4 晚班机动 H
5 高峰班 C
6 休息 O
employee
1 张三 1 1
2 李四 1 1
3 周七 4 1
4 王五 4 0
5 朱六 2 0
6 黄二 3 0
Workplace
1 资阳
2 简阳
3 内江
4 遂宁
要求如下:
1、地点1、地点2、地点3、地点4四个地点上班,地点1和地点4是分别有2人上班,地点2和地点3只有一人上班。
2、班次有早班机动(用字母F表示 8:30-17:00)、晚班机动(用字母H表示 17:30-2:00)、早班监控(用字母A表示 8:00-16:30)、晚班监控(用字母B表示 16:30-1:00)、高峰班(用字母C表示)、休息(用字母O表示)。每个班次是8小时上班时间、每个季度上够500个小时。
3、地点1上班的2人加上地点4上班的1人共三个人负责上监控班(即 早班监控、晚班监控)。(注:他们三人可以上早班机动和晚班机动,其他人不能上早班监控和晚班监控)
4、每天必须有人上早班监控和晚班监控,必须至少有一人上早班,一人上晚班(同一上班地点不能同时有人上早班机动和早班监控,同样不能同时有人上晚班机动和晚班监控)
5、当天晚班(或者监控晚班)第二天不能上早班(或者早班监控),在一个地点上班的人,不能一直都是一个班,要早班晚班兼顾。
6、每周星期四需要两个人上晚班(有一个必须是晚班监控,另一个是晚班机动)。
7、连续上班不能超过5天,不能连续上3个晚班(晚班机动或者晚班监控)。
8、周五到周日是高峰期每个地点尽量保持有人上班。
9、排出来的班表不需要存储,需要存储的信息只有人员 班次名称 上班地点。
10、只需要排班不需要考虑考勤和签到的问题。
最后呈现的效果图如下:
...全文
252 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-08-01
  • 打赏
  • 举报
回复
别把提问当成免费做项目的,让大家去给你分析设计实现? 这不现实,费时费力的事没人做,花费大家太多时间去理解,不会时建议外包项目
二月十六 2017-08-01
  • 打赏
  • 举报
回复
引用 7 楼 oasiswsc 的回复:
只能结贴了。
楼主可以把问题简化简化,这么长,看完再思考得很长时间……
取昵称麻烦 2017-08-01
  • 打赏
  • 举报
回复
只能结贴了。
chenbin4024 2017-07-30
  • 打赏
  • 举报
回复
任务安排也能加上就更好
zbdzjx 2017-07-24
  • 打赏
  • 举报
回复
之前写的考勤相关的,基本上不会单纯的用SQL语句来解决,都是用开发语言+SQL来解决的。相对于只用SQL语句,要简单的多。
zhouyuehai1978 2017-07-24
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
[quote=引用 2 楼 zhouyuehai1978 的回复:] 召唤刷帖机器人先来建下测试数据@sinat_28984567
你们这些懒蛋,楼主都给建表语句了,还不动手 我是没信心看完这么长的问题……[/quote] 我也是,看到第三条我已经缓存不够用了。。。
二月十六 2017-07-24
  • 打赏
  • 举报
回复
引用 2 楼 zhouyuehai1978 的回复:
召唤刷帖机器人先来建下测试数据@sinat_28984567
你们这些懒蛋,楼主都给建表语句了,还不动手 我是没信心看完这么长的问题……
zhouyuehai1978 2017-07-24
  • 打赏
  • 举报
回复
召唤刷帖机器人先来建下测试数据@sinat_28984567
OwenZeng_DBA 2017-07-24
  • 打赏
  • 举报
回复
@oasiswsc 你这个问题太大了,建议,先尝试自己实现。等遇到问题,再针对某个具体再问

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧