使用dBase IV中的索引

时间:2013-11-27 12:10:00

标签: sql dbase

我有两个我希望连接的数据库。第一个数据库的名称是cenik.dbf,第二个数据库的名称是izdaja.dbf。

cenik.dbf看起来像这样:

itemid | name

1      | some-name
2      | some-other
3      | name xy

...

izdaja.dbf看起来像这样:

invoice | itemid | qty

1       |1       |50
1       |2       |40
2       |1       |50    
2       |3       |40
3       |2       |10
3       |3       |40
...

izdaja.dbf是一个包含25k条目的数据库,我希望尽快将特定itemid的所有qty值相加。这是我到目前为止的代码,但它只返回特定itemid的第一个数据。

CLEAR

SELECT 1

USE cenik

SELECT 2

USE izdaja

INDEX ON itemid TO in_izd


SELECT 1

SET RELATION TO itemid INTO izdaja

GO TOP

DO WHILE .NOT. eof()

    ?itemid    
    ??'        '    
    STORE (izdaja -> qty)  TO iz    
    ??'        '
    ??iz    
    SKIP 1
ENDDO
WAIT

CLOSE ALL

CLEAR

RETURN

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

如果其他答案对您不起作用,您可能需要在帖子中详细说明。编辑以显示您对输出的期望。但我也会提供一个选择。您似乎对所呈现的输出样本中将要发生的事情感到困惑。你拥有的将为每个cenik打印一条记录,无论izdaja中的第一个数据记录是什么。 dBASE还支持sql查询,并应自动利用表中可用的任何索引。如果没有,我怀疑它会在运行中创建一个索引来帮助优化查询。

此查询将获取每个“Cenik”ID,总数量和grins,该ID的记录数。然后你可以扫描输出。如果您只想要一个特定的单个ItemID,那么user304067提供的答案就可以了。

if used( "tmpSummary" )
   select tmpSummary
   use
endif

select;
      c.itemid,;
      c.name,;
      count(*) as TotalRecords,;
      sum(i.qty ) as TotalQty;
   from ;
      cenik c ;
         join izdaja i ;
            on c.itemid = i.itemid ;
   group by ;
      c.itemid ;
   into ;
      table tmpSummary

*/ Now, you have the data, now dump it out however you want.
select tmpSummary
do while not eof()
   ? itemid
   ?? name
   ?? TotalRecords
   ?? TotalQty
enddo

use

现在,如果你只想要一个SINGLE ItemID,你可以在“INTO”子句之前添加一个SQL-Where子句。

   where c.itemid = TheOneIDYouWant ;
   into table tmpSummary

现在,我的语法基于多年使用Visual FoxPro(VFP),但希望dBASE在其sql中非常接近。我无法确认的唯一真正的不同是它对“into”条款的支持。在VFP中,您可以执行“into cursor Something”,它将创建一个基于MEMORY-ONLY的dbf结果实例,这样当它关闭时,用于它的临时表也是如此。否则,此示例将进入另一个您必须在之后管理和删除的实际TABLE。

如果您希望以报告格式输出,通过将SQL用于表(或Cursor),您可以创建报表布局,只需将此结果用于报表而不基于行? (打印)命令,如你所知,不提供任何格式或对齐方式。您也可以将此结果复制到输出格式,例如通过CSV格式化excel,并在其他工具中执行其他任何操作。

答案 1 :(得分:-1)

使用此:

USE izdaja
sum qty to aa(just a variable) for itemid = 1

结果将是变量aaqty 1总共itemid