Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Seperating values into seperate columns

Hi,
I have another scripting challange! I have a single column from a database that is storing multiple categories seperated with a '|' (pipe). The number of categories a user can select is not limited, so some strings may have 1, 2 or 3 categories, but some may have potentially many more. I need to split out each substring into seprate colums.
IDCategories
1Car
2Car|Bike
3Car|Bike|Boat
4Car|Bike|Boat|Plane
I require a table that looks like this
ID1234
1Car
2CarBike
3CarBikeBoat
4CarBikeBoatPlane
Just to be clear, I do not know the number of columns that would need to be generated up front, so I cannot use simple string manipulation to extract the segments.
Thanks
Haider
1 Solution

Accepted Solutions
CELAMBARASAN
Partner - Champion
Partner - Champion

Hi,

Little upgrade in Jagan code. Just added a code to join all the tables generated.

LET vStart = NoOfTables();

Test:

LOAD

          ID,

          If(Previous(ID) <> ID, 1, Peek(RowNo) + 1) AS RowNo,

          Category;

LOAD

          ID,

          SubField(Categories, '|') AS Category

INLINe [

ID,          Categories

1,          Car

2,          Car|Bike

3,          Car|Bike|Boat

4,          Car|Bike|Boat|Plane];

Split:

Generic

LOAD

          *

Resident Test;

DROP TABLE Test;

LET vLoop = NoOfTables() - $(vStart) - 1;

//Rename first table name

RENAME Table Split.1 to Split;

FOR i = 1 to vLoop

LET vCurrentTable = 'Split.'& ($(i) + 1);

Left Join(Split)

LOAD

          *

Resident

$(vCurrentTable);

DROP Table $(vCurrentTable);

NEXT

Hope it helps

Celambarasan

View solution in original post

4 Replies
jagan
Luminary Alumni
Luminary Alumni

Hi,

Please find attached file for solution.

Regards,

Jagan.

CELAMBARASAN
Partner - Champion
Partner - Champion

Hi,

Little upgrade in Jagan code. Just added a code to join all the tables generated.

LET vStart = NoOfTables();

Test:

LOAD

          ID,

          If(Previous(ID) <> ID, 1, Peek(RowNo) + 1) AS RowNo,

          Category;

LOAD

          ID,

          SubField(Categories, '|') AS Category

INLINe [

ID,          Categories

1,          Car

2,          Car|Bike

3,          Car|Bike|Boat

4,          Car|Bike|Boat|Plane];

Split:

Generic

LOAD

          *

Resident Test;

DROP TABLE Test;

LET vLoop = NoOfTables() - $(vStart) - 1;

//Rename first table name

RENAME Table Split.1 to Split;

FOR i = 1 to vLoop

LET vCurrentTable = 'Split.'& ($(i) + 1);

Left Join(Split)

LOAD

          *

Resident

$(vCurrentTable);

DROP Table $(vCurrentTable);

NEXT

Hope it helps

Celambarasan

Not applicable
Author

Amazing...Thank you to all that replied 🙂

Not applicable
Author

Hi.

I was doing the example file when you got the answer.

Maybe another way to do it.

Alessandro Furtado