Foxpro 复杂子查询

Posted

技术标签:

【中文标题】Foxpro 复杂子查询【英文标题】:Foxpro complex sub query 【发布时间】:2013-09-05 22:35:23 【问题描述】:

我很难在 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年初到现在的平均qte SUM(shist.qte)/months(每个项目的月份是从上面的查询中计算出来的)

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

【问题讨论】:

UNION 不能工作仅仅是因为它在 Visual FoxPro 3.0 之前不受支持 不是这样。刚刚仔细检查,UNION 在 FoxPro 2.x 中。 【参考方案1】:

由于我不太了解您将在哪里应用联合,并且您似乎多次运行查询,所以这是一个非常古老的技巧,在 VFP 的旧时代可以使用...

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

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 有 scan/endscan,但不记得它起源于多远,所以在这里使用 do while NOT eof()...

在任一选项结束时,都会为您尝试处理的每个项目提供一个模拟 UNION,以便处理成一个“别名”结果“C_ThisIsMaster”

【讨论】:

我最终创建了多个查询,但由于我不知道如何将输出用作表来运行新查询,所以我创建了一个临时表,在此表上运行新查询,然后删除它 SCAN/ENDSCAN 回到 FoxPro 2.0。 @TamarE.Granor,我是这么认为的,但不想因为其他方式仍然有帮助而放弃他们

以上是关于Foxpro 复杂子查询的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#SQL 子查询

第五章 复杂查询 5-3 关联子查询

编写复杂查询-子查询

编写复杂查询-子查询

第8讲:复杂查询

SQL基础教程(第2版)第5章 复杂查询:5-2 子查询