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