从另一个表

时间:2018-04-12 16:30:34

标签: openedge cross-apply

我刚刚开始使用openge,我需要从两个表中加入信息,但我只需要第二行中的第一行。

基本上我需要做一个典型的SQL Cross Apply但正在进行中。我只在OpenEdge 11中查看文档和语句FETCH FIRST 10 ROWS ONLY

我的查询是:

SELECT * FROM la_of PUB.la_ofart ON la_of.empr_cod = la_ofart.empr_cod 
  AND la_of.Cod_Ordf = la_ofart.Cod_Ordf 
  AND la_of.Num_ordex = la_ofart.Num_ordex AND la_of.Num_partida = la_ofart.Num_partida
  CROSS APPLY (
    SELECT TOP 1 ofart.Cod_Ordf AS Cod_Ordf_ofart , 
              ofart.Num_ordex AS Num_ordex_ofart
    FROM la_ofart AS ofart
    WHERE ofart.empr_cod = la_ofart.empr_cod 
        AND ofart.Num_partida = la_ofart.Num_partida 
        AND la_ofart.doc1_num = ofart.doc1_num 
        AND la_ofart.doc2_linha = ofart.doc2_linha
    ORDER BY ofart.Cod_Ordf DESC) ofart 

我正在使用SSMS从OE10中使用ODBC连接器提取数据并使用OpenQuery查询到OE。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了你的问题,也许你可以使用这样的东西。也许这不是解决问题的最佳方案,但可能符合您的需求。

DEF BUFFER ofart    FOR la_ofart.

DEF TEMP-TABLE tt-ofart NO-UNDO LIKE ofart
    FIELD seq       AS INT
    INDEX ch-seq
        seq.

DEF VAR i-count     AS INT  NO-UNDO.

EMPTY TEMP-TABLE tt-ofart.

blk:
FOR EACH la_ofart NO-LOCK,
    EACH la_of NO-LOCK  
        WHERE la_of.empr_cod    = la_ofart.empr_cod
        AND   la_of.Cod_Ordf    = la_ofart.Cod_Ordf
        AND   la_of.Num_ordex   = la_ofart.Num_ordex 
        AND   la_of.Num_partida = la_ofart.Num_partida,
    EACH ofart NO-LOCK
        WHERE ofart.empr_cod    = la_ofart.empr_cod
        AND   ofart.Num_partida = la_ofart.Num_partida
        AND   ofart.doc1_num    = la_ofart.doc1_num
        AND   ofart.doc2_linha  = la_ofart.doc2_linha
    BREAK BY ofart.Cod_Ordf DESCENDING:

    ASSIGN i-count = i-count + 1.

    CREATE tt-ofart.
    BUFFER-COPY ofart TO tt-ofart
        ASSIGN ofart.seq = i-count.

    IF i-count >= 10 THEN
        LEAVE blk.

END.

FOR EACH tt-ofart USE-INDEX seq:
    DISP tt-ofart WITH SCROLLABLE 1 COL 1 DOWN NO-ERROR.
END.