sql的一句语句,求教!!(100分)

  • 主题发起人 主题发起人 free_366
  • 开始时间 开始时间
F

free_366

Unregistered / Unconfirmed
GUEST, unregistred user!
ID(唯一的) 部门 年 月 a b c
77 人力资源部 2006 1 加白 加白 加夜
说明:字段a,b,c为字符型,直接用count(a)可以,但只统计得1,用sum(a)报错,如何统计这条记录加白班的天数,加夜班的天数
 
楼主写的不清楚啊,没看明白。
 
select count(ID) 加白班天数 from table where (a='加白' ) or (b='加白')
select count(ID) 加夜班天数 from table where (a='加夜' )
 
用游标吧,用通配符进行控制,是白班的i++就可以统计
 
三楼写的符合你的要求
 
这个表设计逻辑上本身就有问题~~
 
来自:weichao9999, 时间:2006-6-19 8:55:27, ID:3474699
select count(ID) 加白班天数 from table where (a='加白' ) or (b='加白')
select count(ID) 加夜班天数 from table where (a='加夜' )
对于这个记录确实可以统计,我表达可能不是很清楚,补充一点,字段a='加白'不是固定值,a有可能为加夜,b,c也是一样,按部门,某年,某月统计某一个员工某年某月加白班的天数,加夜班的天数,谢谢!
 
来自:狼崖山, 时间:2006-6-19 9:19:27, ID:3474729
这个表设计逻辑上本身就有问题~~

愿听其详,谢谢!按部门,某年,某月统计某一个员工某年某月加白班的天数,加夜班的天数,这是目的,我数据库的表是这样设计的,员工ID(唯一),部门,年,月,姓名,考勤1,考勤2....考勤31,记录日期,请指正!
 
来自:bgqy2000, 时间:2006-6-19 8:59:44, ID:3474703
用游标吧,用通配符进行控制,是白班的i++就可以统计

能写几条代码,谢谢
 
为什么要用三个考勤?三个考勤的作用分别是什么?
 
楼主,我认为你的表设计的不太合理,下面是我的方案,你看看可以不可以
员工ID(唯一),部门,年,月,日 姓名,考勤 记录日期
77 人力资源部 2006 1 4 加白

用的时候搜
select count(id) where 年=‘2006’and 月=‘1’and 考勤=‘加白’
就是这么个意思,楼主看看怎样
 
select isnull(sum(aa.j1),0) as jbs,员工ID from (
(select count(ID) j1,员工ID from table where (a='加白') group by 员工ID) a
unoin
(select count(ID) j2,员工ID from table where (b='加白') group by 员工ID) b
union
(select count(ID) j3,员工ID from table where (c='加白')group by 员工ID)) c) aa

没有调试,凑合着看吧,你这个查询并不复杂,可以有多种做法。最好的做法可能是写自定义函数
 
萧峒的是最好的库设计
 
员工ID,部门, 日期, 班次,考勤,记录日期
77 人力资源部 2006-01-04 1 加白 2006-06-18
77 人力资源部 2006-01-04 2 加白 2006-06-18
77 人力资源部 2006-01-04 3 加夜 2006-06-18
77 人力资源部 2006-01-05 1 矿工 2006-06-19
77 人力资源部 2006-01-05 2 事假 2006-06-19
77 人力资源部 2006-01-05 3 加夜 2006-06-19
我的考勤管理就是这么做的
 
汗....,刚才小弟的SQL语句写错了,居然没有from table 现改正
表设计
员工ID(唯一),部门,年,月,日 姓名,考勤 记录日期
77 人力资源部 2006 1 4 加白

用的时候搜
select count(id) from table where 年=‘2006’and 月=‘1’and 考勤=‘加白’
就是这么个意思,楼主看看怎样
 
weichao9999 的加上group by 就可以我认为!
 
select sum(a) from
(select id,a from table group by having id =77)
 
select count(ID) 加白班天数 from table where (a='加白' )
 
楼上的好像没理解lz的意思,按照他1楼给的例子,是不是要得出
id:77 加白:2 加夜:1,所以a b c 应该分开来统计的:

select id,sum(a) as 加白班次数 from
(select id,count(id)as a from table where a='加白' and (日期段) group by id
union
select id,count(id)as a from table where b='加白' and (日期段) group by id
union
select id,count(id)as a from table where c='加白' and (日期段) group by id
)
group by id

同理再算一次加夜,如果不怕服务器太忙,2种情况一起union来计算也行,不同字段就行。

算法应该没问题,怕是怕到时算出:加白730次加夜365次 工资找谁拿?
 
(1)为什么要用三个考勤?三个考勤的作用分别是什么?记录某一个员工每个月出勤的情况,有加白,加中,加夜,出差等十几种情况;
(2)用的时候搜
select count(id) where 年=‘2006’and 月=‘1’and 考勤=‘加白’
这个主意不错,但是这样考勤员录某一个部门的员工,不直观,我想把某一个月生成一条考勤表,这样第二天,第三天...录入数据时,直接在表里修改,直观,方便录入,你这个表设计,又要解决如何把某一个员工某年某月的所有天数汇成一个表,方便录入;
(3)weichao9999师兄这个设计与萧峒类似; 谢谢各位
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部