Select 来自 Table 对于另一个 Table 中的每一行的前 1

Select Top 1 From a Table For Each row in another Table

我刚开始使用 openedge,我需要连接两个表中的信息,但我只需要第二个表中的第一行。

基本上我需要做一个典型的 SQL 交叉应用,但正在进行中。我只在 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 通过 ODBC 连接器从 OE10 提取数据并使用 OpenQuery 查询 OE。

感谢大家的帮助。

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

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.