| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1876 人关注过本帖
标题:探讨一个VFP编程问题
只看楼主 加入收藏
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
结帖率:30%
收藏
已结贴  问题点数:20 回复次数:23 
探讨一个VFP编程问题
探讨一个VFP编程问题

某超市要统计1999年9月至2001年4月所销售的雪碧数量明细,已知有d1999表、d2000表和d2001表分别储存有相关货品的货名和数量,现要求通过编写程序,把1999年9月至2001年4月所销售的雪碧数量从d1999表、d2000表和d2001表中提取出来形成新的表(b01),再行统计。请高手指点,谢谢。
  为直观起见,俺把形成d1999表、d2000表和d2001表的有关代码列出,可在vfp6.0运行,方便理解。
  close all
  clear
  set safe off
   
  Create Table d1999 (ss n(4),hm c(10))
  FOR i=1 TO 12  
  cComstr="ALTER TABLE d1999 ADD COLUMN ms"+CHRTRAN(STR(i,2),' ','0')+" n(6)"
  &cComstr   
  endfor   
  Create Table d2000 (ss n(4),hm c(10))  
  FOR i=1 TO 12  
  cComstr="ALTER TABLE d2000 ADD COLUMN ms"+CHRTRAN(STR(i,2),' ','0')+" n(6)"
  &cComstr  
  endfor
  Create Table d2001 (ss n(4),hm c(10))  
  FOR i=1 TO 12  
  cComstr="ALTER TABLE d2001 ADD COLUMN ms"+CHRTRAN(STR(i,2),' ','0')+" n(6)"
  &cComstr  
  endfor
   
   
  close all
  clear
  use d1999 in 1   
  zap
  use d2000 in 2   
  zap
  use d2001 in 3   
  zap
   
  close all
  use d1999
  Insert Into d1999 (hm,ms01,ms02,ms03,ms04,ms05,ms06,ms07,ms08,ms09,ms10,ms11,ms12);
  Values ("雪碧",300,500,700,200,600,800,900,300,950,900,980,500)
  brow  
  use d2000  
  Insert Into d2000 (hm,ms01,ms02,ms03,ms04,ms05,ms06,ms07,ms08,ms09,ms10,ms11,ms12);
  Values ("雪碧",100,200,300,400,500,600,800,900,1000,900,950,600)  
  brow
  use d2001  
  Insert Into d2001 (hm,ms01,ms02,ms03,ms04,ms05,ms06,ms07,ms08,ms09,ms10,ms11,ms12);
  Values ("雪碧",200,400,600,800,700,600,700,500,1050,600,850,700)  
  brow
  close all
  clear
  set safe on
  
搜索更多相关主题的帖子: 探讨 VFP 
2010-08-15 21:24
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
select a.ss,;
       a.hm,;
       a.ms09+a.ms10+a.ms11+a.ms12+;
       b.ms01+b.ms02+b.ms03+b.ms04+b.ms05+b.ms06+b.ms07+b.ms08+b.ms09+b.ms10+b.ms11+b.ms12+;
       c.ms01+c.ms02+c.ms03+c.ms04 as ms;
       from d1999 a,d2000 b,d2001 c;
       where a.hm=b.hm and a.hm=c.hm and alltrim(a.hm)=='雪碧'

[ 本帖最后由 Tiger5392 于 2010-8-15 21:50 编辑 ]

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-15 21:46
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
运行很成功,谢谢2楼高手的指导。
俺在提问题是可能描述的不清楚,俺的想法是,在知道起始的查询日期,如1999年9月至2001年4月,通过编程自动形成您提供的那段代码而得出结果。谢谢。
因为查询的起始日期是变动的,或者是跨年份的,而查询的货物也变动的,如果能通过编程,根据不同的查询时间段和货品,自动得出出结果,如果想知道被查询货品在查询的时间段的销售量明细,也可以把它打印出来,而不用每次调整程序代码。
谢谢。
2010-08-15 23:02
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
你的表这样设计
ss n 4
hm c 10
rq d
ms n 6
代码就会很容易了
select ss,hm,sum(ms) from tablename where between(rq,startingdate,endingdate) and hm=your goods

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-15 23:27
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢版主那么快就给出指导。
因为在日常的进货登记时,确实有如b1999、b2000、b2001那样的存在12个月份的货品数量登记表,一个年度一张那样的大表而且货品也挺多的,如果通过编程能够,在知道起始年月的情况下,如1999年9月至2001年4月,任意查询,自动选择年表b1999、b2000、b2001这三张表,在选择表后,能自动挑出月份,如从b1999表中挑出ms9、ms10、ms11、ms12,从b2000表挑出ms1、ms2、ms3。。。。。。。。ms12,从b2001表中挑出ms1。。。。。。ms4,然后把这些数据形成新的表(明细表),最后在进行统计。
请版主给予指导,谢谢。
2010-08-15 23:51
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
把命令做成一个字符串,通过循环生成这个字符串,然后宏替换执行就好了

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-16 00:25
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢版主,请您给俺详细的指导,thank you so much.
2010-08-16 00:41
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
ldDate1=date(1999,9,1)
ldDate2=date(2001,4,30)
lcHm='雪碧'
lc='select a.ss,a.hm,0'
for i=year(ldDate1) to Year(ldDate2)
  cTableAlias=chr(asc('a')+i-year(ldDate1))
  do case
  case i=year(ldDate1)
    for j=month(ldDate1) to 12
      lc=lc+'+'+cTableAlias+'.ms'+padl(j,2,'0')
    endfor
  case i=year(ldDate2)
    for j=1 to month(ldDate2)
      lc=lc+'+'+cTableAlias+'.ms'+padl(j,2,'0')
    endfor
  otherwise
    for j=1 to 12
      lc=lc+'+'+cTableAlias+'.ms'+padl(j,2,'0')
    endfor
  endcase
endfor
lc=lc+' as ms from '
for i=year(ldDate1) to year(ldDate2)
  cTableAlias=chr(asc('a')+i-year(ldDate1))
  lc=lc+'d'+str(i,4)+' as '+cTableAlias+','
endfor
lc=left(lc,len(lc)-1)+' where '
for i=year(ldDate1)+1 to year(ldDate2)
  cTableAlias=chr(asc('a')+i-year(ldDate1))
  lc=lc+'a.hm='+cTableAlias+'.hm and '
endfor
lc=lc+' alltrim(a.hm)==['+lcHm+']'
&lc

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-16 01:02
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
程序运作很成功,直接就有结果了,俺真的很感动,万分感谢版主。
因俺水平有限,再请教版主,如果想要新的表(明细表)该怎样呢?谢谢。
2010-08-16 01:26
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
要哪个表?

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-16 01:28
快速回复:探讨一个VFP编程问题
数据加载中...
 
   



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

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