PDA

View Full Version : SQL: Daten aus mehreren Sätzen in einen Satz bringen, aber Position beibehalten



msost
14-07-22, 17:40
Moin,
ich muß in einem historisch gewachsenen System Daten aus mehreren Sätzen in einen Satz bringen.

Beispiel: 2 Stücklisten

Artikel Material Menge
1 528 12
1 22 1
1 77 4
2 53 2
2 22 8
2 11 3

Pro Stückliste soll 1 Satz in der neuen Datei stehen. Darin die Mengen der enthaltenen Materialien, jedoch ohne Materialnummer. Es sind bestimmte Felder pro Materialnummer zu benutzen. Diese kommen aus einer Datei "Materialübersicht" mit einem Satz und 1000 Feldern:

M0001 M0002 M0003... M0999 M1000
77 528 11 22 53

Steht also in der "Materialübersicht" das Material 22 in Feld 999 müssen auch die Mengen im Feld 999 landen:

Artikel MN0001 MN0002 MN0003... MN0999 MN1000
1 4 12 0 1 0
2 0 0 3 8 2

Hat jemand eine elegant Idee (gern innerhalb einer SQL procedure ohne RPG)? Arrays?

Fuerchau
14-07-22, 17:52
Das musst du im ILERPG machen.
Da kannst du mit der DS arbeiten und die Pseudoarrayfelder mit der Basisreferenz als Array defineren.

dcl-ds Data name('DATEI') qualified;
end-ds;

dcl-s Basis * inz(%addr(Data.Feld001));
dcl-s FeldArray like(Data.Feld001) dim(nnn);

Per SQL gehts dann einfach pauschal.

msost
20-07-22, 16:36
Danke!
Bin erst jetzt dazu gekommen dass zu Ende zu bringen. Hab's wie vorgeschlagen in RPG gemacht.

Da hab ich jetzt nur ein Problem: Das perfekte Ergebnis hab ich in einer Array-Datenstruktur.
Würde das gern in eine DS rüberschieben, die mit Likerec definiert ist.
Wie kann ich das Array als Ganzes in die Likerec-DS schieben (quasi der alte MOVEA)?
Irgendwie krieg ich's nicht gebacken (zu warm, wahrscheinlich...)

Fuerchau
20-07-22, 17:31
Du kannst einen Pointer initialisiern mit %addr(feld) auf das 1. Element deiner Feldgruppe.
Basierend auf diesem Pointer beschreibst du dein Array.
Somit belegen Array und die Einzelfelder den selben Platz und Moves brauchst du nicht mehr.
Wie oben beispielhaft beschrieben.