Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo zusammen,
ich möchte eine Liste mit Väter- und Kindernamen mit dem Skript-Editor so transformieren, so dass für jedes weitere Kind eines Vaters eine eigene Spalte gefüllt wird:
Wenn ein Vater also zwei Kinder hat, dann soll der Name des ersten Kindes in dem Feld Kind1 stehen und der Name des zweiten Kindes in der Spalte Kind2 usw.. Im Ergebnis möchte ich nur eine Zeile pro Vater haben und die Kindernamen in den entsprechenden Feldern Kind1, Kind2, Kindx.
Das habe ich versucht:
Daten:
LOAD * Inline [
Zeile, Vater, Kind
1, Dieter, Thomas
2, Hans, Susanne
3, Hans, Frank
4, Hans, Florian
5, Franz, Heike
];
left join
LOAD
Vater,
If(Vater <>PEEK('Vater',-1),Kind,'') as Kind1,
If(Vater = PEEK('Vater',-1),Kind,'') as Kind2,
If(Vater = PEEK('Vater',-2),Kind,'') as Kind3,
If(Vater = PEEK('Vater',-3),Kind,'') as Kind4,
If(Vater = PEEK('Vater',-4),Kind,'') as Kind5
RESIDENT Daten;
Hat jemand die richtige Idee? Vielen Dank für eure Unterstützung 🙂
Kai
Ich habe in der Community ein vergleichbares Problem gefunden und die Lösung auf meine Frage übertragen:
Tabelle:
LOAD * INLINE
[
Zeile, Vater, Kind
1, Dieter, Thomas
2, Hans, Susanne
3, Hans, Meike
4, Hans, Florian
5, Franz, Heike,
6, Franz, Susanne
];
Ergebnis:
load
Vater,
SubField(AlleKinder,'|',1) as Kind1,
SubField(AlleKinder,'|',2) as Kind2,
SubField(AlleKinder,'|',3) as Kind3
;
load
Vater ,
concat(Kind& '|') as AlleKinder
Resident Tabelle
Group by Vater;
Drop Table Tabelle;
Um es etwas dynamischer zu gestalten, dann bist du nicht so an der Kindx gebunden.
Kannst du es auch so lösen
Tabelle:
LOAD * INLINE
[
Zeile, Vater, Kind
1, Dieter, Thomas
2, Hans, Susanne
3, Hans, Meike
4, Hans, Florian
7, Hans, Lisi
5, Franz, Heike,
6, Franz, Susanne
];
TEMP:
load
RowNo(),
Vater ,
concat(Kind& '|') as AlleKinder
Resident Tabelle
Group by Vater;
Drop Table Tabelle;
ERGEBNIS:
NoConcatenate
LOAD Distinct
Vater
Resident TEMP;
let vmaxrows = NoOfRows('TEMP');
for i=0 to $(vmaxrows)-1
let vmaxkind = SubStringCount(peek('AlleKinder',$(i),'TEMP'),'|');
for j=1 to $(vmaxkind)
left join (ERGEBNIS)
LOAD
Vater,
SubField(AlleKinder,'|',$(j)) as [Kind$(j)]
Resident TEMP;
next
next
Drop Table TEMP;
exit script
Beste Grüße
Ich habe in der Community ein vergleichbares Problem gefunden und die Lösung auf meine Frage übertragen:
Tabelle:
LOAD * INLINE
[
Zeile, Vater, Kind
1, Dieter, Thomas
2, Hans, Susanne
3, Hans, Meike
4, Hans, Florian
5, Franz, Heike,
6, Franz, Susanne
];
Ergebnis:
load
Vater,
SubField(AlleKinder,'|',1) as Kind1,
SubField(AlleKinder,'|',2) as Kind2,
SubField(AlleKinder,'|',3) as Kind3
;
load
Vater ,
concat(Kind& '|') as AlleKinder
Resident Tabelle
Group by Vater;
Drop Table Tabelle;
Um es etwas dynamischer zu gestalten, dann bist du nicht so an der Kindx gebunden.
Kannst du es auch so lösen
Tabelle:
LOAD * INLINE
[
Zeile, Vater, Kind
1, Dieter, Thomas
2, Hans, Susanne
3, Hans, Meike
4, Hans, Florian
7, Hans, Lisi
5, Franz, Heike,
6, Franz, Susanne
];
TEMP:
load
RowNo(),
Vater ,
concat(Kind& '|') as AlleKinder
Resident Tabelle
Group by Vater;
Drop Table Tabelle;
ERGEBNIS:
NoConcatenate
LOAD Distinct
Vater
Resident TEMP;
let vmaxrows = NoOfRows('TEMP');
for i=0 to $(vmaxrows)-1
let vmaxkind = SubStringCount(peek('AlleKinder',$(i),'TEMP'),'|');
for j=1 to $(vmaxkind)
left join (ERGEBNIS)
LOAD
Vater,
SubField(AlleKinder,'|',$(j)) as [Kind$(j)]
Resident TEMP;
next
next
Drop Table TEMP;
exit script
Beste Grüße
Tausend Dank, dass ist natürlich die Sahneschnittenlösung. Tatsächlich geht es bei der Aufgabe nicht um Väter und Kinder (was besonders anschaulich ist), sondern um andere Konstellationen. Und dort können auch mehr als zehn "Kinder" vorhanden sein.