赞
踩
得到一份1200多人的Excel格式名单(含手机号,姓名),为其做一个接种疫苗计划。
具体要求:
将名单中的人员随机排序形成一个新次序。按这个次序,每150人分为一组。第一组的接种时间是7:30-8:30,第二组是8:30-9:30.......依次类推。组内不再区分次序。
试使用MSSQL生成这个接种计划表。形如 姓名、手机号、接种时段。
我的方案:
关键点1、导入数据到数据库。由于源文件是Excel,存在64位兼容性问题,因此先另存为csv之类的平面文件再导入。
关键点2、随机排序。其实MSSQL T-SQL对于随机排序有个小技巧,order by newid()即可。 用个带自增长ID字段的表保存随机排序结果。因为仅1200多条记录不算多,可暂不考虑索引。
关键点3、150分组及对应时段。本质上可以看作新序号与时间增量的一个对应关系。很容易想到用新序号除以150,取整,即可得到第几批次。基准时间+批次号(看作小时)就是结果。战术上运用到的内置函数可以是DateAdd(小时,增量,基量)。
- --CSV导入数据库表过程略。
-
- --初步生成结果表,并保存随机排序结果
- create table 结果表 (id int identity(0,1) ,name varchar(255),mp varchar(255))
- go
-
- insert 结果表(name,mp)
- select name,mp from CSV导入表 order by newid()
- go
-
- -- 验证
- select * from 结果表 order by id
- go
-
- -- 增加接种时间字段
- alter table 结果表 add jzsj datetime null
- go
-
- -- 先强制都设置为基准时间
- update 结果表 set jzsj = '2020-12-30 07:30:00'
- go
-
- -- 按批次更新
- update 结果表 set jzsj = dateadd(hh,id/150,jzsj)
- go
核心问题解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。