| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 884 人关注过本帖
标题:vfp9.0替换问题
只看楼主 加入收藏
hzh999
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-11-29
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:10 
vfp9.0替换问题
表1                                                表2
时间      日期            值班员                    交班时间     日期          接班人
05:35    2011-5-11                                9:00     2011-5-10        张三
10:40    2011-5-12                                8:50     2011-5-11        李四
7:28     2011-5-12                                9:10     2011-5-12        小二


结果
时间      日期            人员                    
05:35    2011-5-11           张三                  
10:40    2011-5-12            小二                  
7:28     2011-5-12           李四

怎么根据表1和表2的时间来判断表1的值班人员?
搜索更多相关主题的帖子: 接班人 值班员 
2013-08-28 12:26
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
你这种问题方式让人无从下手,还得分析你的数据规则。你求助时应该把数据规则告诉大家,有了规则才能考虑代码。
2013-08-28 14:04
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
木游戏规则 看8懂
2013-08-28 14:12
hzh999
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-11-29
收藏
得分:0 
回复 2楼 taifu945
谢谢啊,补上
就是说根据表2的时间来推算出表1是谁在值班
比方说                                                
表2
 交班时间     日期          接班人
  9:00     2011-5-10        张三
  8:50     2011-5-11        李四
  9:10     2011-5-12        小二
....        ......           ....
意思就是从5-10早上9点钟到5-11日早上8:50是张三在值班 5-11早上8:50到5-12早上9:10是李四在值班。每一天都有个值班人。
然后
表1                                                
时间      日期            值班员                    
05:35    2011-5-11                                
10:40    2011-5-12                              
7:28     2011-5-12   
意思就是想问,在5-11早上5:35时间是谁在值班,5-12日早上10:40和7:28又是谁在值班 。
这样说应该明白了吧?            

[ 本帖最后由 hzh999 于 2013-8-28 14:35 编辑 ]
2013-08-28 14:26
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
SET TALK OFF
SET SAFETY OFF
CLOSE ALL

USE T1
INDEX ON 时间 TAG 时间
SELECT 2
USE T2
INDEX ON 交班时间 TAG 时间
GO TOP
SELECT 1
SCAN
   REPLACE T1.值班员 WITH T2.接班人
   SKIP IN 2
ENDSCAN

SET TALK ON
SET SAFETY ON
CLOSE ALL
RETURN

给你一段代码。如果表2的记录没有缺失,也即,每一刻交接班时间都有记录的话,算法比较简单(未知正确与否):就是把两边的表接时间字段升序排序,然后按记录号点对点地把接班人姓名填写到表1中的值班人里去就好了。这种算法对交接表要求高,而表1的时段可以是表2所有记录的时间字段上下限之间即可。
2013-08-28 14:45
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
也可以用一条命令实现。当然,算法如上所述:
SELECT T5.时间,T5.日期,T6.接班人 值班员;
   FROM ;
      (SELECT RECNO() 序号, T3.*;
          FROM ;
             (SELECT 时间,日期 FROM T1 ;
                 ORDER BY 2) T3) T5 ,;
      (SELECT RECNO() 序号, T4.*;
          FROM ;
             (SELECT 交班时间,接班人 FROM T2 ;
                 ORDER BY 1) T4) T6 ;
   WHERE T5.序号=T6.序号 ;
   ORDER BY 1
2013-08-28 14:54
hzh999
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-11-29
收藏
得分:0 
回复 6楼 taifu945
2011ph.rar (10.31 KB)

看看一下数据在这呢,按照第一段代码不得行
2013-08-28 15:36
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:10 
SELECT Ph2011.*,Zbb.接班人 ;
   FROM Ph2011 ;
      JOIN ;
         (SELECT Ph2011.日期时间, MAX(Zbb.时间) 交班时间;
             FROM Ph2011 JOIN Zbb ;
                ON Zbb.时间<=Ph2011.日期时间 ;
             GROUP BY Ph2011.日期时间) T1
;
         ON Ph2011.日期时间=T1.日期时间 ;
      JOIN Zbb ;
         ON Zbb.时间=T1.交班时间 ;
   ORDER BY Ph2011.日期时间

    你看看这段代码行不?
    先别着急用,你先把两个数据表的“日期时间”和“时间”字段改成日期时间型(必须要改),改完后再做。你原来用的都是字符型,而且字段的宽度都不相同,会造成很大的麻烦。由于你这两个字段数据的格式符合日期时间型的样子,所以改完以后数据并不会丢失。
    接下来再看:红色部分用于根据PH2011表的每条记录时间在Zbb表中产生对应的最后交班时间,然后两个表各把时间字段抽出来生成一个临时表T1,用于联接查询时分别作为两个表的联接桥梁。我抽取了几个数据,貌似是正确的,你看看吧。
2013-08-28 16:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
程序代码:
CLOSE DATABASES
SELECT RECNO() JL,接班人,时间 FROM ZBB INTO CURSOR T1
SELECT MAX(时间) SJ FROM T1 INTO CURSOR T11
T0=LEFT(T11.SJ,10)
SELECT RECNO() JL,接班人,时间 FROM ZBB WHERE RECNO()>1 INTO CURSOR T2
SELECT A.*,NVL(B.时间,T0+[ 23:59:59]) 时间1 FROM T1 A LEFT JOIN T2 B ON B.JL-1=A.JL INTO CURSOR T3
UPDATE PH2011 SET 值班人员=T3.接班人 FROM T3 WHERE BETWEEN(CTOT(PH2011.日期时间),CTOT(T3.时间),CTOT(T3.时间1))
SELECT PH2011
BROWSE

坚守VFP最后的阵地
2013-08-28 17:10
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2013-08-28 17:14
快速回复:vfp9.0替换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022591 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved