我是Progress 4gl中的新手我希望使用临时条件在单个表中获取两个表的数据。 我有两个表ih_hist和sod1_det,我想从每个表中获得2,2列。从我需要的ih_hist列,是ih_nbr和ih_inv_nbr,从sod1_det列是sod1_nbr和sod1_shipfrom_ctry。 请帮帮我。 提前谢谢
答案 0 :(得分:4)
由于您没有发布有关临时表的任何信息,我猜测它们是通过名为" id"的字段链接在一起的。我还假设ih_hist是一个"主人" table和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中的字段不匹配但包含不同的数据 - 如名称字段in都)。否则你也可以做一个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: