Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
new_dubben
Contributor II
Contributor II

Zeileneinträge in einzelne Spalten umwandeln

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

Labels (2)
2 Solutions

Accepted Solutions
new_dubben
Contributor II
Contributor II
Author

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;

View solution in original post

abxvuan
Partner - Contributor
Partner - Contributor

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

View solution in original post

3 Replies
new_dubben
Contributor II
Contributor II
Author

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;

abxvuan
Partner - Contributor
Partner - Contributor

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

new_dubben
Contributor II
Contributor II
Author

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.