VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 37|回复: 7

急请教,请教VFP编查询汇总及打印问题!

[复制链接]

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2020-3-15 12:30:01 | 显示全部楼层 |阅读模式
我有一个表,表叫AAA.DBF,表中有如下字段及记录,请看:
A1    A2  A3  A4  A5  A6  A7  A8  A9  A10  A11  A12  A13  A14
1563  1   2   5   9    7   1   1   2   1   152   1    1    268
2123  1   1   5   6    6   1   1   2   2    52   2    1   1168
4212  2   2   5   7    7   2   2   2   1    22   1    2     18
2913  1   2   8   9    6   1   2   1   2   252   1    2     68
9125  2   1   5   7    7   2   2   1   1    52   2    2    158
2823  1   1   5   9    5   3   3   1   1   352   1    3    148
1123  3   2   8   7    5   3   3   3   1   452   3    3    163
9187  3   2   5   6    7   3   2   3   1   212   3    3    156

我要按照以上库查询及汇总并打印出2张表,如样如下
第一张
aa1   (此处汇总上表中A1栏总和)   
AA2   (此处求出上表A2记录为1的个数)
aa3   (此处求出上表A2记录为2的个数)
aa4   (此处求出上表A2记录为3的个数)
aa5   (此处求出上表A3记录为1的个数)
aa8   (此处求出上表A3记录为2的个数)
  .
  .
  .     (如上面分别求出表A4-A10中的记录个数
第二张
Ba111 (此处求出A12中记录为1的A11项记录总和)
Ba112 (此处求出A12中记录为2的A11项记录总和)
Ba113 (此处求出A12中记录为3的A11项记录总和)
Ba131 (此处求出A13中记录为1的A14项记录总和)
Ba132 (此处求出A13中记录为2的A14项记录总和)
Ba133 (此处求出A13中记录为3的A14项记录总和)


请问怎么编哈,请写详细源码,非常感谢!

回复

使用道具 举报

0

主题

24

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2020-6-20 13:30:01 | 显示全部楼层
第一张表:

select 'aa1' as 字段1,sum(A1) as 字段2 from aaa union all
select 'aa2' as 字段1,count(iif(a2=1,1,0)) as 字段2 from aaa union all
select 'aa3' as 字段1,count(iif(a2=2,1,0)) as 字段2 from aaa union all

......


第二张表类似
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2020-6-24 17:15:01 | 显示全部楼层
非常谢谢哈,我按照你编的执行,但显示不出来结果哈,我还是把以上要打印的表查询结果做一个库哈,我好看运行情况,库名BBB.DBF 结构如下

AA1         AA2   AA3   AA4  AA5.....AAX  BA111  BA112    BA113  BA131  BA132  BA133
此处放结果,即上面列的要求 .............

麻烦把上面列出的要求结果存入此表,谢谢!
回复

使用道具 举报

0

主题

24

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2020-7-13 19:00:01 | 显示全部楼层
lcString1='select sum(a1) as aa1'
s=2
for i=2 to 10
        n=transform(i)
        for j=1 to 3
                lcString1=lcString1+',sum(iif(a&n.='+transform(j)+',1,0)) as aa'+transform(s)
                s=s+1
        endfor
endfor
lcString1=lcString1+' into table table1 from aaa'
&lcString1 &&生成表1 table1
browse &&看一下




lcString2='select '
i=12
n=transform(i)
m=transform(i-1)
for j=1 to 3
        lcString2=lcString2+'sum(iif(a&n.='+transform(j)+',a&m.,0)) as ba&m'+transform(j)+','
endfor
i=13
n=transform(i)
m=transform(i+1)
for j=1 to 3
        lcString2=lcString2+'sum(iif(a&n.='+transform(j)+',a&m.,0)) as ba&n'+transform(j)+','
endfor
lcString2=left(lcString2,len(lcString2)-1)+' into table table2 from aaa'
&lcString2 &&生成表2 table2
browse &&看一下

select table1.*,table2.* into table 总表 from table1,table2
browse &&看一下
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2020-7-15 11:45:01 | 显示全部楼层
你的这段源码相对上面的个AAA.DBF库及生成的查询库可以解决,我也学习了下哈,但是由于字段名有规率,你的源码按规率最简化做成,所以我方法还是没掌握哈!
如果我把AAA库字段名改下,不写成A1......A10,我改成中文或者字母随意字段名,生成的查询库里字段名改成所要查询字段名加要查询条件库,AAA库字段里的记录也不光是1-3,还有别的4,5,6,7这样没顺序的,怎么样写源码哈,我把库改成如下:
有一个表,表叫AAA.DBF,表中有如下字段及记录,请看:
abds bse  aew esd erw  add ghj puuu iuy  ki  sda  hgf  iuy  iuyy
1563  1    2   1   9    7   1   1    2   1   152   1    1    268
2123  4    1   2   6    6   1   1    2   2    52   2    1   1168
4212  2    3   1   7    7   2   2    2   1    22   4    2     18
2913  4    4   3   9    6   1   2    1   2   252   4    2     68
9125  2    5   5   7    7   2   2    5   1    52   2    2    158
2823  1    1   4   9    5   3   3    5   1   352   1    3    148
1123  3    6   3   7    5   3   3    3   1   452   3    3    163
9187  3    2   5   6    7   3   2    3   1   212   3    3    156


生成的结果库为BBB.DBF

asdf  ds1 ds2 ds3 aew1 aew2 aew3 aew4 aew5 aew6 .....XXXX  sda1 sda2 sda3 sda4 yuyy1 yuyy2 yuyy3 yuyy4
此行放结果,即下面列的要求 .........

asdf   (此处汇总上表中A1栏总和)   
ds1   (此处求出上表bse记录为1的个数)
ds2   (此处求出上表bse记录为2的个数)
ds3   (此处求出上表bse记录为3的个数)
ds4   (此处求出上表bse记录为4的个数)
aew1  (此处求出上表aew记录为1的个数)
  .
  .

sda1 (此处求出A12中记录为1的A11项记录总和)
sda2 (此处求出A12中记录为2的A11项记录总和)
sda3 (此处求出A12中记录为3的A11项记录总和)
sda4 (此处求出A12中记录为4的A11项记录总和)
yuyy1 (此处求出A13中记录为1的A14项记录总和)
yuyy2 (此处求出A13中记录为2的A14项记录总和)
yuyy3 (此处求出A13中记录为3的A14项记录总和)

麻烦按上成这些条件写源码教我哈!
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2020-7-15 19:45:01 | 显示全部楼层
上楼有几处没改正,重新贴起

如果我把AAA库字段名改下,不写成A1......A10,我改成中文或者字母随意字段名,生成的查询库里字段名改成所要查询字段名后加要查询条件,AAA库字段里的记录也不光是1-3,还有别的4,5,6,7这样没顺序的,怎么样写源码哈,我把库改成如下:
有一个表,表叫AAA.DBF,表中有如下字段及记录,请看:

abds bse  aew esd erw  add ghj puuu iuy  ki  sda  hgf  hiuy  iuyy
1563  1    2   1   1    1   1   1    2   1   152   1    1    268
2123  4    1   2   2    2   1   1    2   2    52   2    1   1168
4212  2    3   1   5    3   2   2    2   3    22   4    2     18
2913  4    4   3   5    3   1   2    1   4   252   4    2     68
9125  2    5   6   4    2   2   2    5   4    52   2    2    158
2823  1    1   4   3    3   4   3    5   5   352   1    3    148
1123  3    6   3   2    2   4   3    3   6   452   3    3    163
9187  3    2   5   1    1   3   2    3   7   212   3    3    156
下面是BSE-KI记录范围
     1-4  1-5  1-6 1-5 1-3 1-4 1-3  1-4  1-7      1-4  1-3

生成的结果库为BBB.DBF

asdf  bse1 bse2 bse3 bse4 aew1 aew2 aew3 aew4 aew5 aew6 .....XXXX  sda1 sda2 sda3 sda4 yuyy1 yuyy2 yuyy3 yuyy4
此行放结果,即下面列的要求 .........

asdf   (此处汇总上表中A1栏总和)   
ds1   (此处求出上表bse记录为1的个数)
ds2   (此处求出上表bse记录为2的个数)
ds3   (此处求出上表bse记录为3的个数)
ds4   (此处求出上表bse记录为4的个数)
aew1  (此处求出上表aew记录为1的个数)
  .
  .

sda1 (此处求出hgf中记录为1的sda项记录总和)
sda2 (此处求出hgf中记录为2的sda项记录总和)
sda3 (此处求出hgf中记录为3的sda项记录总和)
sda4 (此处求出hgf中记录为4的sda项记录总和)
yuyy1 (此处求出hiuy中记录为1的yuyy项记录总和)
yuyy2 (此处求出hiuy中记录为2的yuyy项记录总和)
yuyy3 (此处求出hiuy中记录为3的yuyy项记录总和)
回复

使用道具 举报

0

主题

24

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2020-7-25 10:30:01 | 显示全部楼层
这样你随意起字段名了,不过如果要改变计算的列,修改代码中相应I的值

Use aaa Alias MyTest
For I=2 To 13        &&得出第2列和第13列的共有那些数(第11除外)
        If I<>11
                lcString1='Select Distinct '+Field(I,'MyTest')+' Into Cursor Dist_'+Field(I,'MyTest')+' From aaa'
                &lcString1
        Endif
Endfor
I=1        &&求第1列的和用
lcString2='select sum('+Field(I,'MyTest')+') as '+Field(I,'MyTest')+'和'
for I=2 to 10  &&求第2列至第10列各个数的个数
        Select 'Dist_'+Field(I,'MyTest')
        Scan
                lcString2=lcString2+',sum(iif('+Field(I,'MyTest')+'='+Transform(Evaluate(Field(1)))+',1,0)) as '+Field(I,'MyTest')+Transform(Evaluate(Field(1)))
        Endscan
endfor
lcString2=lcString2+' into table table1 from aaa'
&lcString2 &&生成表1 table1
browse &&看一下

lcString3='select '
I=12        &&求第12列各个数时第11列的和
Select 'Dist_'+Field(I,'MyTest')
Scan
        lcString3=lcString3+'sum(iif('+Field(1)+'='+Transform(Evaluate(Field(1)))+","+Field(I-1,'MyTest')+',0)) as '+Field(I-1,'MyTest')+Transform(Evaluate(Field(1)))+','
EndScan
I=13        &&求第13列各个数时第14列的和
Select 'Dist_'+Field(I,'MyTest')
Scan
        lcString3=lcString3+'sum(iif('+Field(1)+'='+Transform(Evaluate(Field(1)))+","+Field(I+1,'MyTest')+',0)) as '+Field(I+1,'MyTest')+Transform(Evaluate(Field(1)))+','
EndScan
lcString3=left(lcString3,len(lcString3)-1)+' into table table2 from aaa'
&lcString3 &&生成表2 table2
browse &&看一下

select table1.*,table2.* into table BBB from table1,table2  &&生成你的结果表BBB.DBF
browse &&看一下
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2020-7-28 01:30:01 | 显示全部楼层
谢谢老师!这个方法我学会了哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表