在这个例子中,我有两个表;订单标题(oe-hdr)和位置(位置)。订单表头表包含两个字段(sale-location-key和ship-location-key),这些字段在位置表中具有关联的位置名称。如果我使用SQL来获取结果,我会做这样的事情......
SELECT oe-hdr.order-num, oe-hdr.order-date, saleloc.location-name, shiploc.location-name
FROM oe-hdr,
(SELECT location.location-name
FROM oe-hdr, location
WHERE oe-hdr.sale-location-key = location-key) as saleloc,
(SELECT location.location-name
FROM oe-hdr, location
WHERE oe-hdr.ship-location-key = location-key) as shiploc
WHERE oe-hdr.order-num = saleloc.order-num
AND oe-hdr.order-num = shiploc.order-num
有没有人知道如何在Progress程序中复制它?
答案 0 :(得分:5)
为“location”定义两个缓冲区,然后使用指向缓冲区的链接执行for-each:
DEFINE BUFFER saleloc FOR location.
DEFINE BUFFER shiploc FOR location.
FOR EACH oe-hdr
NO-LOCK,
EACH saleloc
WHERE saleloc.location-key = oe-hdr.sale-location-key
NO-LOCK,
EACH shiploc
WHERE shiploc.location-key = oe-hdr.ship-location-key
NO-LOCK
:
DISPLAY
oe-hdr.order-num
oe-hdr.order-date
saleloc.location-name
shiploc.location-name
DOWN
.
END.
一个注释 - 如果位置表中不存在销售或送货地址,则不会显示整个记录。如果您需要该功能,则需要采用不同的方法 - 它将涉及将“链接”移动到FOR EACH块中的一对“FIND”语句。
答案 1 :(得分:2)
要克服Tims关于丢失地址的观点,您可以使用函数或方法(如果使用OO代码)返回location-name并在显示中使用它。它可以在这方面实现更好的错误处理。但不确定性能影响。 只是一个想法。