当前位置:编程学习 > C#/ASP.NET >>

考勤SQL语句请求支援

上课刷卡考勤系统,SQL语句碰到难题,请求高手解答
说明:将学生分组(跨班分,或在一个班里划分),某学生一天可能不止一门课,排课制定时间范围,同时制定教室
表结构如下:
1.考勤规则表(分为单位)
迟到时间范围(即多少分算吃到),早退时间范围,刷卡前后有效范围
2.排课表
ID,学生组ID,日期,考勤时间,教室
格式如:1,1,20110101,8:00-12:00   A101
        2,1,20110101,13:00-17:00  A102
3.刷卡记录表
ID,学号,日期,刷卡时间,标记
格式如:1,2011,20110101,8:00,1(上课)
        2,2011,20110101,11:30,0(下课)
        3,2011,20110101,13:00,1(上课)
        4,2011,20110101,16:30,0(下课)
现在想实现的效果是:
1.查看学生的刷卡明细,刷卡时间逗号隔开
格式如:学号   日期       刷卡时间
即:2011     20110101     8:00,11:30,13:00,16:30(刷卡时间逗号隔开)
2.日报表(组里未刷卡的学生的信息也要体现出来)
格式如:学号    日期   上课1时间   结果(迟到,早退或未刷卡) 下课1时间   结果    上课2时间 结果   下课2  结果。。。。。。缺勤次数(一天该刷卡没刷卡的次数/2)
3.月报表
格式如:学号,迟到次数,早退次数,缺勤次数
      --------------------编程问答-------------------- 看看 --------------------编程问答-------------------- 错了,不要学了吧,早就过时了的东西Q --------------------编程问答-------------------- 多表连接查询 --------------------编程问答--------------------
引用 3 楼 xiaoqing023 的回复:
多表连接查询



看看吧  学回来它你的操作会很简单 --------------------编程问答-------------------- 表连接查询。 --------------------编程问答-------------------- 谢谢大家,我需要参考的代码,请继续给力帮助 --------------------编程问答-------------------- 以前做了个oa
里面倒有考勤的功能 很强大 但数据库就不符合 不知是否可以 --------------------编程问答--------------------
引用 7 楼 henhaowo 的回复:
以前做了个oa
里面倒有考勤的功能 很强大 但数据库就不符合 不知是否可以


那最好不过了啊,我的邮箱是wdf@cumt.edu.cn,谢了啊 --------------------编程问答-------------------- 对于第一个:
1.查看学生的刷卡明细,刷卡时间逗号隔开
格式如:学号 日期 刷卡时间
即:2011 20110101 8:00,11:30,13:00,16:30(刷卡时间逗号隔开)
我个人建议做个一个触发器,建立一个“学生的刷卡明细”实体表,在每次刷卡的时候要嘛用这个触发器增加一条记录或者是更新已经存在的记录,这个记录就是某个学生一天的刷卡记录。
如果用sql语句直接实现这个的结果估计很麻烦,可能用到多重循环 --------------------编程问答-------------------- 对于第二个:
“2.日报表(组里未刷卡的学生的信息也要体现出来)
格式如:学号 日期 上课1时间 结果(迟到,早退或未刷卡) 下课1时间 结果 上课2时间 结果 下课2 结果。。。。。。缺勤次数(一天该刷卡没刷卡的次数/2)

学号 日期 上课1时间 结果(迟到,早退或未刷卡) 下课1时间 结果 上课2时间 结果 下课2 结果。。。。。。缺勤次数(一天该刷卡没刷卡的次数/2)
这个有动态的上课节数,上课n,这个n不固定? --------------------编程问答-------------------- 谢谢HANCS,希望大侠们能给出SQL语句啊,说和做是两码事啊,谢谢 --------------------编程问答-------------------- 怎么没人解答呢,等着解决了过年呢 --------------------编程问答--------------------

create table #tb3 (id int identity(1,1),学号 varchar(20),日期 varchar(20),刷卡时间 varchar(20),标记 varchar(20))
insert into #tb3 
select 2011,'20110101','8:00','1(上课)' union all
select 2011,'20110101','11:30','0(下课)' union all
select 2011,'20110101','13:00','1(上课)' union all
select 2011,'20110101','16:30','0(下课)'

select 学号,日期, 刷卡时间 = stuff((select ',' + 刷卡时间 from #tb3 t where 学号 = #tb3.学号 for xml path('')) , 1 , 1 , '')
from #tb3
group by 学号,日期
/*
2011 20110101 8:00,11:30,13:00,16:30
*/
--------------------编程问答-------------------- 2,3问题。。。是让我们帮着你建数据库呢。。。 --------------------编程问答--------------------
引用 14 楼 laowang134 的回复:
2,3问题。。。是让我们帮着你建数据库呢。。。


谢谢老王朋友,表结构给了啊
而且你给的答案里,STUFF语句不大见到过,还需加强学习,呵呵 --------------------编程问答-------------------- 请继续解答啊,有始有终啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 数据,以及想要的数据。。 --------------------编程问答-------------------- 把你学生信息表 ,学生分组表,考勤规则表,排课记录表 和刷卡记录表 结构 贴出来,最好把数据库备份文件拿出,才好做 --------------------编程问答-------------------- 这题纯粹为而SQL而SQL
真正项目里,不需要在SQL语句里实现
把表对应成数据集合,把每一行记录对应一个实体类来做。 --------------------编程问答--------------------
引用楼主 cumtouter 的回复:
上课刷卡考勤系统,SQL语句碰到难题,请求高手解答
说明:将学生分组(跨班分,或在一个班里划分),某学生一天可能不止一门课,排课制定时间范围,同时制定教室
表结构如下:
1.考勤规则表(分为单位)
迟到时间范围(即多少分算吃到),早退时间范围,刷卡前后有效范围
2.排课表
ID,学生组ID,日期,考勤时间,教室
格式如:1,1,20110101,8:00-12:00 A101
  ……


表述不够清楚。没办法给你弄。

不过给你个办法,不用什么都用SQL语句来解决,当然也可以。

你的刷卡记录表,是每次的时间,这个时候取出来如果要用数据库的话最好写成一个函数。传进去学号,日期等,返回带逗号的时间。

比如这样

select *,dbo.GetLeafNode(itemid) as countnode ,dbo.GetLeafNotNullNode(itemid) as countnotnull,dbo.GetLastDate(itemid) as lastdate from iteminfo where navid=@navID and ItemYear = @ItemYear

下面是函数

CREATE FUNCTION [dbo].[GetLeafNode] 
(
@ItemID nvarchar(50)

RETURNS int AS  
BEGIN 
declare @count int
select @count=count(nodeid) from siteinfo as a where a.status='0' and a.ItemID = @ItemID and not exists ( select nodeid from siteinfo as b where a.itemid = b.itemid and a.nodeid = b.parentid )
return @count
END

--------------------编程问答-------------------- 在函数中,你可以将你需要的拼接成带逗号的字符串 --------------------编程问答-------------------- 数据库名:sys
表名:Admin

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 UserName varchar 20 0 否
3 PassWord varchar 20 0 否
表名:Paiban

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 TemId int 4 0 否
3 Week int 4 0 否
4 PaiBanDate datetime 8 3 否
5 StartTime varchar 20 0 否
6 EndTime varchar 20 0 否
7 RoomId varchar 50 0 否
表名:CourseTime

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 CourseSpan varchar 50 0 否
3 StartTime varchar 12 0 否
4 EndTime varchar 12 0 否
表名:Regular

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 ChiDaoTimeSpan int 4 0 否
3 ZaoTuiTimeSpan int 4 0 否
4 ChiDaoOut int 4 0 是
5 ZaoTuiOut int 4 0 是
6 ValidTimeSpan int 4 0 否
7 RepeatTimeSpan int 4 0 否
表名:Room

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 RoomId int 4 0 是 是 否
2 RoomCode varchar 20 0 否
3 RoomName varchar 50 0 否
4 MaxCount int 4 0 否
5 InCount int 4 0 是 ((0))
表名:ShuaCardRecord

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 StudentCode varchar 21 0 否
3 ShuaCardDate datetime 8 3 否
4 WeekDay varchar 20 0 否
5 ShuaCardTime varchar 20 0 否
6 BanciCount int 4 0 否
7 Flag bit 1 0 否
8 RoomId int 4 0 否
表名:Student

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 CardNo varchar 21 0 是 否
2 StudentCode varchar 21 0 否
3 Name varchar 21 0 否
4 Sex bit 1 0 否
5 ClassId varchar 19 0 否
6 TeamId int 4 0 是
表名:StudentPaiban

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 StudentCode varchar 21 0 否
3 Week int 4 0 否
4 PaiBanDate datetime 8 3 否
5 StartTime varchar 20 0 否
6 EndTime varchar 20 0 否
7 RoomId varchar 50 0 否
8 IsChange bit 1 0 否 ((0))
表名:Class

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 ClassId varchar 19 0 是 否
2 ClassName varchar 50 0 否
3 NianJi varchar 4 0 否
4 Profession varchar 20 0 否
表名:Team

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 TemId int 4 0 是 是 否
2 TeamName varchar 50 0 否
表名:XueQi

序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明
1 Id int 4 0 是 是 否
2 XueNian varchar 50 0 否
3 XQ int 4 0 否
4 WeekCount int 4 0 否
5 StartDate datetime 8 3 否

--------------------编程问答-------------------- 各位大侠,表结构在上面一个帖子上,我没导出SQL脚本
表结构设计请大家指正下
另外就是把那3个问题,麻烦给解决下
十分感谢各位热心人士。 --------------------编程问答-------------------- --------------------编程问答-------------------- 难道就没人帮忙解决了??悲哀啊 --------------------编程问答-------------------- 请求专家解答
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,