我很难在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总和。
答案 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”来处理