Foxpro复杂子查询

时间:2013-09-05 22:35:24

标签: mysql sql database relational-database foxpro

我很难在foxpro 2.6中进行查询(别无选择)

请注意,联合查询不起作用。

stockw (item, qte, dat) item is key
shist (item, qte, date) each row is a purchase for item and qte and date

以下查询将计算shist项目的首次购买,以了解自年初以来我们销售每件商品的数月

select shist.item as s_item, MIN(shist.date),stockw.qte as qte_remain,;
 IIF( YEAR(MIN(shist.date)) < 2013, MONTH(DATE()), MONTH(DATE())-MONTH(shist.date)+1 ) as months;
 FROM shist,stockw;
 WHERE (shist.item LIKE 'LF-TK%' OR shist.item LIKE 'PL%' OR shist.item LIKE 'LF-A%') AND stockw.item = shist.item;
 GROUP BY shist.item;
 into CURSOR x

我想: - 计算从2013年年初到现在每个项目SUM(shist.qte)/月的平均qte(月数是根据上述查询计算的每个项目)

也许在不同的查询中,我想要以下内容: - 从2013年年初到现在,为每个项目(获得最高月份)选择每月最大的shist.qte总和。

1 个答案:

答案 0 :(得分:1)

由于我不太关注你应用联盟的地方,并且看起来你有多次运行查询,这里有一个非常古老的技巧,可以在VFP的旧时代使用......

当你选择进入光标时,光标通常是只读的而不是读写的附加到...但是,如果你使用第一次运行查询AGAIN的结果作为不同的别名,你可以追加它。有些东西......

use in select( "C_ThisIsMaster" )

for i = 1 to 10
   use in select( "C_ThisRun" )
   select blah, blah2, blah3 ;
      from YourTables;
      where SomeKey = SomeIDForCyclei;
      into cursor C_ThisRun

   if not used( "C_ThisIsMaster" )
      select 0
      use ( dbf( "C_ThisRun") ) again alias C_ThisIsMaster 
   else 
      select C_ThisIsMaster
      append from dbf( "C_ThisRun" )
   endif 
endfor 

for [i]循环只是一个示例,但是如果你运行很多循环就可以执行UNION,你可以将它拉入查询并模拟相同的内容,例如通过

select * 
   from SomeTable 
   where SomeCondition 
   into cursor C_DoTheseItems

use in select( "C_ThisIsMaster" )

select C_DoTheseItems
do while not eof()
   Do the same thing as inside the FOR loop above 

   select C_DoTheseItems
   skip 
enddo

我知道VFP有扫描/结束扫描,但是不记得发生了多远,所以在这里使用了do而NOT eof()...

在任一选项的最后都会给你一个模拟的UNION,你想要处理的每个项目都是一个“别名”结果“C_ThisIsMaster”来处理