| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 826 人关注过本帖, 1 人收藏
标题:表的操作 , 各位大神帮忙
只看楼主 加入收藏
lsy721
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-19
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:14 
表的操作 , 各位大神帮忙
表 :  flag      total    a1    a2    a3    a4    a5    a6    a7    a8  
    11011101       388    61    51    20    63    58    75    0     80   
    11110011       355    45    60    75    80    25    10    65    30

取 a1 到 a8最大六个值, 将flag相应标志置为1,其他两位置为0,将total置为最大六个值得总和
搜索更多相关主题的帖子: total 
2012-05-30 10:54
sh600839
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2005-8-30
收藏
得分:3 
好像比较麻烦,笨办法
先把横变成如下竖表,然后再处理
字段名 值  记录号  标志
a1    61     1
a2    51     1
a3    20     1
....
a1    45     2
a2    60     2
...
a8    30     2

按记录号和值进行索引,(3到8)倍数的记录标志设为1,其余为0
select sum(值) group by 记录号,标志
再转回横表
2012-05-30 14:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:3 
回复 楼主 lsy721
楼主能说明一下为什么要这样做的理由吗。

坚守VFP最后的阵地
2012-05-30 15:34
ilikeflash
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:148
专家分:186
注 册:2011-4-6
收藏
得分:3 
sele 表
FOR i=1 TO RECCOUNT()
IF RECNO()=i
REPLACE total WITH a1+a2+a3+a4+a5+a6+a7+a8 all
ENDIF
ENDFOR
其它不会弄啦
2012-05-30 16:17
sxy166
Rank: 3Rank: 3
等 级:论坛游侠
威 望:6
帖 子:69
专家分:127
注 册:2012-3-28
收藏
得分:3 
我做个找最小值的

n1=0&&最小值
zdbl=''&&字段变量

scan for not eof
    n1=a1
    for i=1 to 8
        zdbl='a'+allt(str(i))
        if &zdbl<n1
            n1=&zdbl
        endi
    endf   
ends

[ 本帖最后由 sxy166 于 2012-5-30 17:37 编辑 ]
2012-05-30 17:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
回复 楼主 lsy721
这个数据处理法则有没有漏洞呢?比如1楼数据第一条,0可以被排除,但如果出现两个20,或者有三个0,你打算怎么办?当然,你应该有某种假设条件,但最好把各种情况的处理办法都说清楚,不然做出来的代码,也仅仅是代码而已。

授人以渔,不授人以鱼。
2012-05-30 18:38
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:0 
GO top
DO while !EOF()
    n_zf="MAX(a1,a2,a3,a4,a5,a6,a7,a8)"
    js=0
    n_flag="00000000"
    FOR i=1 to 6
        max_field=&n_zf
        FOR j=1 to 8
            n_field="a"-TRANSFORM(j)
            IF &n_field=max_field
                js=js+&n_field
                n_zf=STRTRAN(n_zf,n_field,"")
                n_zf=STRTRAN(n_zf,"(,","(")
                n_zf=STRTRAN(n_zf,",)",")")            
                n_zf=STRTRAN(n_zf,",,",",")            
                n_flag=STUFF(n_flag,j,1,"1")
                EXIT
            ENDIF
        NEXT
    NEXT
    REPLACE total with js,flag with n_flag
    skip
ENDDO
BROWSE


[ 本帖最后由 qjbzjp 于 2012-5-30 20:21 编辑 ]

相互学习,互相交流,共同提高。
2012-05-30 20:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
回复 楼主 lsy721
程序代码:
CREATE CURSOR TABNAME1 (FALG C(8),TOTAL N(4),值 N(2),标志 C(1),最大值 N(4))
CREATE CURSOR TABNAME (FALG C(8),TOTAL N(4),A1 N(2),A2 N(2),A3 N(2),A4 N(2),A5 N(2),A6 N(2),A7 N(2),A8 N(2))
INSERT INTO TABNAME VALUES ("11011101",388,61,51,20,64,58,75,0,80)
INSERT INTO TABNAME VALUES ("11110011",355,45,60,75,80,25,10,65,30)

GO TOP
SCAN
   SCATTER FIELDS LIKE A* TO TABARRAY
   ASORT(TABARRAY)
   N_SUM=0
   FOR I=1 TO FCOUNT("TABNAME")-2
       IF I>2
          N_SUM=N_SUM+TABARRAY(I)
       ENDIF
       INSERT INTO TABNAME1 VALUES (TABNAME.FALG,TABNAME.TOTAL,TABARRAY(I),IIF(I<=2,"0","1"),0)
   ENDFOR
   REPLACE 最大值 WITH N_SUM IN TABNAME1
ENDSCAN
SELECT TABNAME1
BROWSE

坚守VFP最后的阵地
2012-05-31 01:19
lsy721
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-19
收藏
得分:0 
回复 3楼 sdta
实际工作中的需求 ,数据处理要求这样
2012-05-31 09:33
lsy721
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-10-19
收藏
得分:0 
回复 6楼 TonyDeng
先不考虑特殊情况 , 只是想通过普通数据来找个解决思路  , 你说的特殊情况也确实存在
2012-05-31 09:35
快速回复:表的操作 , 各位大神帮忙
数据加载中...
 
   



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

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