帮忙优化数据组合的代码
昨天发了1个数据组合问题,得到了sata版主的帮助,由于了帖匆忙,没把问题讲清,今天再发一帖,求帮助。问题:
有三组人员(这里用sz1,sz2,sz3表示),sz1有3名人员(即3个元素),sz2有2名人员(即2个元素),sz3有4个人员(即4个元素 。每次分别从sz1取2名人员、sz2取1名人员、sz3 取3名人员组成一组(6人,每组都为6人)。列出所有6人1组的全部人员。
我的笨方法如下:
创建4个表,bb(总表,反映全部人员)
b1(sz1人员组合表 )
b2(sz2人员组合表 )
b1(sz3人员组合表 )
先列出各组人员组合表,再汇总到总表bb
代码如下:
create cursor bb (m1 c(2),m2 c(2),m3 c(2),m4 c(2),m5 c(2),m6 c(2))
create cursor b1 (m1 c(2),m2 c(2),m3 c(2),m4 c(2),m5 c(2),m6 c(2))
create cursor b2 (m1 c(2),m2 c(2),m3 c(2),m4 c(2),m5 c(2),m6 c(2))
create cursor b3 (m1 c(2),m2 c(2),m3 c(2),m4 c(2),m5 c(2),m6 c(2))
Dimension sz1(3),sz2(2),sz3(4)
sz1(1)='a1'
sz1(2)='a2'
sz1(3)='a3'
sz2(1)='b1'
sz2(2)='b2'
sz3(1)='c1'
sz3(2)='c2'
sz3(3)='c3'
sz3(4)='c4'
****第1组人员组合
SELECT b1
FOR i=1 TO 2
FOR j=2 TO 3
IF i=j &&&去掉同一组重复人员
LOOP
else
Append Blank
REPLACE m1 WITH sz1(i),m2 WITH sz1(j)
endif
ENDFOR
ENDFOR
****第2组人员组合
SELECT b2
FOR i=1 TO 2
Append Blank
REPLACE m3 WITH sz2(i)
ENDFOR
SELECT b3
****第3组人员组合
FOR i=1 TO 2
FOR j=2 TO 3
FOR n=3 TO 4
IF i=j OR j=n &&&去掉同一组重复人员
LOOP
else
Append Blank
kk=Recno()
REPLACE m4 WITH sz3(i), m5 WITH sz3(j), m6 WITH sz3(n)
ENDIF
endfor
ENDFOR
ENDFOR
****3组人员汇总
Select b1
For i=1 To Reccount()
Go i
Select b2
For j=1 To Reccount()
Go j
Select b3
For n=1 To Reccount()
Go n
Select bb
Append Blank
Go Bott
Replace m1 With b1.m1,;
m2 With b1.m2,;
m3 With b2.m3,;
m4 With b3.m4 ,;
m5 With b3.m5,;
m6 With b3.m6
Select b3
Endfor
Select b2
Endfor
Select b1
Endfor
SELECT bb
brow
此方法太笨,
1、组内取的人员多了嵌套层太多
2、每组抽取人员所占字段是硬计算出来的,不具备通用性
3、不会用数组
求此计算的优化代码,谢谢!