我是Progress 4gl的新手,我想使用临时条件在一个表中获取两个表的数据。我有两个表ih_hist和sod1_det,我想从每个表中获得2,2列。我需要的ih_hist列是ih_nbr和ih_inv_nbr,而sod1_det列是sod1_nbr和sod1_shipfrom_try。请帮帮我。提前感谢
由于您没有发布任何关于临时表的信息,我猜它们是由一个名为"id"的字段链接在一起的。我还假设ih_hist是一个"主"表,sod1_det包含详细信息。这很可能是错误的——你需要告诉我们更多关于你的数据!
其中有几个部分你需要做对:首先是两个临时表的连接。这在很大程度上取决于您的临时表定义、临时表包含的内容以及您真正想要的内容。你有一对多、一对一甚至多对多的关系吗?关系是基于单个字段(外键)还是基于许多不同的字段?临时表(像Progress数据库中的实际字段)不包含关系-关系由代码处理!
这是一个可能有助于您入门的基本示例!
DEFINE TEMP-TABLE ih_hist NO-UNDO
FIELD id AS INTEGER
FIELD ih_nbr AS INTEGER
FIELD ih_inv_nbr AS INTEGER.
DEFINE TEMP-TABLE sod1_det NO-UNDO
FIELD id AS INTEGER
FIELD sod1_nbr AS INTEGER
FIELD sod1_shipfrom_ctry AS CHARACTER.
DEFINE TEMP-TABLE ttNewTempTable NO-UNDO
FIELD ih_nbr AS INTEGER
FIELD ih_inv_nbr AS INTEGER
FIELD sod1_nbr AS INTEGER
FIELD sod1_shipfrom_ctry AS CHARACTER.
FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
CREATE ttNewTempTable.
BUFFER-COPY ih_hist TO ttNewTempTable.
BUFFER-COPY sod1_det TO ttNewTempTable.
END.
我可以使用BUFFER-COPY,因为字段名称在源和目标临时表中匹配,并且不重叠(即id_hist中没有名称与sod1_det中的字段匹配,但包含不同的数据,就像两者中的名称字段一样)。否则,您也可以执行ASSIGN或BUFFER-COPY和ASSIGN的组合。
只有ASSIGN:的示例
FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
CREATE ttNewTempTable.
ASSIGN
ttNewTempTable.ih_nbr = ih_hist.ih_nbr
ttNewTempTable.ih_inv_nbr = ih_hist.ih_inv_nbr
ttNewTempTable.sod1_nbr = sod1_det.sod1_nbr
ttNewTempTable.sod1_shipfrom_ctry = sod1_det.sod1_shipfrom_ctry.
END.
ASSIGN和BUFFER-COPY示例:
FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
CREATE ttNewTempTable.
BUFFER-COPY ih_hist TO ttNewTempTable
ASSIGN
ttNewTempTable.sod1_nbr = sod1_det.sod1_nbr
ttNewTempTable.sod1_shipfrom_ctry = sod1_det.sod1_shipfrom_ctry.
END.
根据您的评论,WHERE子句可能看起来像这样:
FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.sod1_nbr = ih_hist.ih_nbr: