OLDKDN ist in diesem Fall Numerisch.
ich habe mir eine Datei erstellt, wo in den Sourcen die Kundennummer vorkommt.
Manchmal kommt Sie Numerisch, manchmal auch Alpha.
Die Längen variieren auch zwischen 5, 0 bis 13, 0 und das selbe im Alpha-bereich.
Datei:
Code:
Feld Datei Art Länge
"SOURCE" KNDRSLT CHARACTER 20
TEILDATEI KNDRSLT CHARACTER 10
TEXT KNDRSLT CHARACTER 50
FELDNAME KNDRSLT CHARACTER 10
FELDLAENGE KNDRSLT CHARACTER 10
INFOTEXT KNDRSLT CHARACTER 30
TSTMP KNDRSLT TIMESTAMP
Im Programm stopple ich folgendes Sqlstatement zusammen:
Code:
TEXT = %trim(%XLATE(HK:HK1:TEXT));
SqlQry = 'INSERT INTO STATISTIK +
SELECT char(' + %TRIM(FELDNAME) + '), +
min(' + HK + %TRIM(SOURCE) + HK + '), +
min(' + HK + %TRIM(TEILDATEI) + HK + '), +
min(' + HK + %TRIM(TEXT) + HK + '), +
min(' + HK + %TRIM(FELDNAME) + HK + '), +
min(' + HK + %TRIM(FELDLAENGE) + HK + '), +
COUNT(*), +
min(' + HK + %TRIM(INFOTEXT) + HK + '), ' +
%CHAR(SQLCOD) +
' from ' + %TRIM(TEILDATEI) + ' A ';
IF %SCAN('A':FELDLAENGE) = *ZEROS;
// Feld Numerisch
SqlQry = %TRIMR(SqlQry) +
' WHERE exists +
(select * from KUNDENP P +
where dec(A.' + FELDNAME + ', 13, 0) = P.KDNNR)';
ELSE;
// Feld Alpha
SqlQry = %TRIMR(SqlQry) +
' WHERE exists +
(select * from KUNDENP P +
where A.' + FELDNAME + ' = CHAR(P.KDNNR))';
ENDIF;
SqlQry = %TRIMR(SqlQry) +
' group by char(' + %TRIM(FELDNAME) + ')';
Exec SQL
execute immediate :SqlQry;
INSERT INTO STATISTIK
SELECT char(OLDKDN), ...
FROM MYFILE A
WHERE exists (select * from KUNDENP P
where dec(A.OLDKDN , 13, 0) = P.KDNNR )
GROUP BY char(OLDKDN)
Hoffe es erklärt zu haben.
Bookmarks