ACCESS下面 SQL语句问题。。。。(9分)

  • 主题发起人 主题发起人 del520
  • 开始时间 开始时间
D

del520

Unregistered / Unconfirmed
GUEST, unregistred user!
有个考勤表

字段:编号 姓名 1 2 3 4 5 6 7 8 9 10...31 上班 休息 
( 这些数字都是字段,表示每一天,字符型占两个字节)

值: 001 王华 01 11 11 11 11 00 10 11 10 11

这些值(字符型)表示考勤状态,第一个字节->上午,第二个字节->下午
如:10上午上班,下午休息

现在我要用SQL语句将这些状态数据值(上多少个半天,休息多少个半天)统计到
“上班”和“休息”两个字段(整型)中去。如:王华整月中有8个'1'则上班=8 
有4个'0'则休息=4

怎么使用啊????

 
再SQL中截字符,并且用IF或Case
 
困难啊 ..[:(][:(][:(]

我用AdoTable加两上循还是可以搞定,但特慢。。。。。。
SQL就无能为力么?
 
我觉得你的表结构有问题,可不可以这样做:建立两个表,一个是员工基本信息表,一个是
考勤表,二者用职工编号关联。在考勤表中建立以下几个字段:职工编号、年度、月份、日期、
上午、下午、备注等。
 
不行呀,方案我也是想了好久的。
只要实现这个就可以了,现在我TABLE加上循环还是可以用,但不划算。

用SQL或者是多几行能实现也可,富翁们帮帮忙啊。
 
你的设计真的好别扭,有必要将表设置那么多字段吗?

编号 姓名 加班开始时间 加班结束时间 工作状态(0:正常 1:加班 2:缺勤) 备注

既然你决定原来的方案,我算了,
 
真的,你的设计好别扭啊,既然这样,我这样作,你看形么:
Select 上班=Convert(int,(SubString((Substring(1,1,1)))
+ Convert(int,(SubString((Substring(2,1,1)))
+ Convert(int,(SubString((Substring(3,1,1)))
+ ... ...
+ Convert(int,(SubString((Substring(30,2,1)))
+ Convert(int,(SubString((Substring(31,2,1)))

休息=(Convert(int,(SubString((Substring(1,1,1)))-1)*(-1)
- (Convert(int,(SubString((Substring(2,1,1)))-1)
-(Convert(int,(SubString((Substring(3,1,1)))-1)
- ... ...
- (Convert(int,(SubString((Substring(30,2,1)))-1)
- (Convert(int,(SubString((Substring(31,2,1)))-1)

From 表名


真的不好啊!!
 
用存储过程来做相当简单
不过你上面的表设计的不合理吧
个人的统计怎么能和每天的考勤在一个表中呀
 
首先,我想说一点,这样定义表结构不科学;
然后,这个问题也不是没有解决办法,可以用计算字段。
1.在表中建立两个Calculated Fields,名称为tbname_Work和tbname_Rest,初值赋0
2.在表的计算字段事件里写(如使用Access的话):
for i := 0 to 31 do
begin
if TableName.Fields[i+2].Field = '11' then
FieldByName('tbname_Work').AsInteger := StrToInt(FieldByName('tbname_Work').AsString) + 2
else if (TableName.Fields[i+2].Field = '10') or (TableName.Fields[i+2].Field = '01') then
FieldByName('tbname_Work').AsInteger := StrToInt(FieldByName('tbname_Work').AsString) + 1
else Exit;
end;
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部