Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
melissapluke
Partner - Creator
Partner - Creator

Opposite of a Cross table

Hi all,

 

I have a data table which has "Cases" and within the cases are multiple rows. I need to condense those multiple rows into a single row. Here is a very small sample of the data. 2 cases, with 3 rows each. (other cases have more rows, it is variable).

melissapluke_0-1614640614889.png

Based on the E&MNo column, I need to create columns for the procedures code/visit IDs that look like this:

melissapluke_1-1614640690757.png

Some cases have a lot of rows (max 30ish) but I am trying to avoid having to do 30 loads where you isolate the E&MNo=1, then E&MNo=2 etc.

Any ideas?

Thanks,

Melissa

 

1 Solution

Accepted Solutions
GaryGiles
Specialist
Specialist

Try the following in your load script (I assumed that your table is named Cases).  I'm sure there is a more eloquent way to derive the ordinals '1st','2nd','3rd', etc. from the counter, but this was quick :

temp_maxlevel:
LOAD max([E&MNo]) as maxNo
resident Cases;

let maxlevel = Peek('maxNo',0,'temp_maxlevel');

DROP TABLE temp_maxlevel;

NewCases:
Load distinct [Case ID]
Resident Cases;

for i = 1 to maxlevel
 Let k = $(i)&if(Match(Right('$(i)',2),1,01,21,31,41,51,61,71,81,91)>0,'st',
                         if(Match(Right('$(i)',2),2,02,22,32,42,52,62,72,82,92)>0,'nd',
                         if(Match(Right('$(i)',2),3,03,23,33,43,53,63,73,83,03)>0,'rd','th')));

    Join (NewCases)
    Load [Case ID],
               [Procedure Code] as [$(k) Procedure Code],
               [Original Visit Type ID] as [$(k) Original Visit Type ID]
    Resident Cases
    where [E&MNo] = $(i);
next

drop table Cases;

 

Hope this helps.

View solution in original post

9 Replies
GaryGiles
Specialist
Specialist

Try the following in your load script (I assumed that your table is named Cases).  I'm sure there is a more eloquent way to derive the ordinals '1st','2nd','3rd', etc. from the counter, but this was quick :

temp_maxlevel:
LOAD max([E&MNo]) as maxNo
resident Cases;

let maxlevel = Peek('maxNo',0,'temp_maxlevel');

DROP TABLE temp_maxlevel;

NewCases:
Load distinct [Case ID]
Resident Cases;

for i = 1 to maxlevel
 Let k = $(i)&if(Match(Right('$(i)',2),1,01,21,31,41,51,61,71,81,91)>0,'st',
                         if(Match(Right('$(i)',2),2,02,22,32,42,52,62,72,82,92)>0,'nd',
                         if(Match(Right('$(i)',2),3,03,23,33,43,53,63,73,83,03)>0,'rd','th')));

    Join (NewCases)
    Load [Case ID],
               [Procedure Code] as [$(k) Procedure Code],
               [Original Visit Type ID] as [$(k) Original Visit Type ID]
    Resident Cases
    where [E&MNo] = $(i);
next

drop table Cases;

 

Hope this helps.

Saravanan_Desingh

Can you upload the Excel sheet which you have shown above?

melissapluke
Partner - Creator
Partner - Creator
Author

Here you go.

Saravanan_Desingh

Try this,

tab1:
LOAD * INLINE [
    Case ID, Procedure Code, Original Visit ID, E&Mno
    8910, 99395, 49, 1
    8910, 99204, 1, 2
    8910, 99214, 2, 3
    9867, 99233, 7, 1
    9867, 99356, 26, 2
    9867, 99357, 27, 3
];

tab2:
Generic
LOAD [Case ID],[E&Mno]&' Procedure Code',[Procedure Code]
Resident tab1;
Generic
LOAD [Case ID],[E&Mno]&' Original Visit ID',[Original Visit ID]
Resident tab1;

Drop Table tab1;
Saravanan_Desingh

Output:

commQV25.PNG

melissapluke
Partner - Creator
Partner - Creator
Author

Hi,

Both solutions worked, thank you both!

Melissa

Saravanan_Desingh

You can add st, nd & th like this.

tab1:
LOAD *, Pick(WildMatch([E&Mno],
            1,21,31,
            2,22,
            3,23,
            '*'),
            'st ', 'st ', 'st ',
            'nd ', 'nd ',
            'rd ', 'rd ',
            'th '
    ) As [E&Mno2];
LOAD * INLINE [
    Case ID, Procedure Code, Original Visit ID, E&Mno
    8910, 99395, 49, 1
    8910, 99204, 1, 2
    8910, 99214, 2, 3
    9867, 99233, 7, 1
    9867, 99356, 26, 2
    9867, 99357, 27, 3
];

tab2:
Generic
LOAD [Case ID],[E&Mno]&' '&[E&Mno2]&' Procedure Code',[Procedure Code]
Resident tab1;
Generic
LOAD [Case ID],[E&Mno]&' '&[E&Mno2]&' Original Visit ID',[Original Visit ID]
Resident tab1;

Drop Table tab1;
Saravanan_Desingh

Output:

commQV26.PNG

johngouws
Partner - Specialist
Partner - Specialist

Good morning. 
I needed to do something similar with finding how many Supplier have supplied certain Product. The data is not quite the same as your but may give you a idea. 

For my solution @sunny_talwar was able to help. Look at this post.
https://community.qlik.com/t5/New-to-Qlik-Sense/Create-Transposed-table-during-load-process/td-p/163...