ABL Progress 4gl:对于输出流中的每个计数

ABL Progress 4gl : For Each with Count in Output-Stream

Progress-Procedure-Editor:

DEFINE STREAM myStream.

OUTPUT STREAM myStream TO 'C:\Temp\BelegAusgangSchnittstelle.txt'.

FOR EACH E_BelegAusgang
    WHERE E_BelegAusgang.Firma = '000'
    AND   E_BelegAusgang.Schnittstelle = '$Standard'
    NO-LOCK:

    PUT STREAM myStream UNFORMATTED
        STRING(E_BelegAusgang.Firma)
        '|'
        STRING(E_BelegAusgang.BelegNummer)
        '|'
        STRING(E_BelegAusgang.Schnittstelle)
        '|'
        SKIP
        .
END.

我明白了(提取):

公司 |贝莱格Nr |炸肉排

000 | 3 | $标准

000 | 3 | $标准

000 | 3 | $标准

000 | 3 | $标准

000 | 3 | $标准

000 | 8 | $标准

000 | 8 | $标准

我需要的是 COUNT BelegNr。所以我将 TXT 的数据导入到 SQL Server.

Server 我的查询是:

SELECT  [BelegNr]
       ,COUNT(*) AS [Anzahl]
FROM [TestDB].[dbo].[Beleg_Ausgang]
GROUP BY [BelegNr]
ORDER BY [Anzahl]

通过该查询,我得到(提取):

BelegNr Anzahl

3 | 5

8 | 2

有没有办法把COUNT直接放到Progress-Code里?我的意思是,我希望我的结果直接来自 Progress-Procedure-Editor.

在 ABL 中,您使用 BREAK BY 而不是 GROUP BY。一个限制是 BREAK BY 分组和排序。

例如,您可以为此设置另一个 "FOR EACH":

DEFINE VARIABLE iCount AS INTEGER     NO-UNDO.

FOR EACH E_BelegAusgang NO-LOCK 
    WHERE E_BelegAusgang.Firma = '000'
    AND   E_BelegAusgang.Schnittstelle = '$Standard'
    BREAK BY BelegNr:

    iCount = iCount + 1.

    IF LAST-OF(BelegNr) THEN DO:
        DISPLAY BelegNr iCount.
        iCount = 0.
    END.

END.

您也可以将该代码合并到导出中,但请注意:这将更改文件行的顺序。也许这对你来说是个问题,也许不是!