Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Complex case statement using group

I have the following table:

tbl

ID  vaccine_code     vaccine_day
A   1A               0
A   2A               30
B   moderna,1A       0
B   moderna,2A       35
C   moderna          0
C   moderna          25

there are various ways in which the vaccines are coded in my database. 1A denotes first dose and 2A denotes second dose. At times, as in ID='C', the dose number is not denoted. In that case, I need to use the value in the vaccine_day column to extrapolate dose information.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I am looking for the following:

ID  vaccine_dose   vaccine_day
A   dose1          0
A   dose2          30
B   dose1          5
B   dose2          35
C   dose1          0
C   dose2          25

So far, I have:

select ID,
       case when vaccine_code like '%1A%' then 'dose1'
       case when vaccine_code like '%2A%' then 'dose2'
       case when vaccine_code = 'moderna' and min(vaccine_day) then 'dose1'
       case when vaccine_code = 'moderna' and max(vaccine_day) then 'dose1'
from tbl
group by vaccine_day;

>Solution :

You have a few issues with your query.

  1. You don’t end your case.

  2. You group by vaccine_day which will return you each vaccine_day.

Didn’t test it as I don’t have the full sample data, both your sample data are the same id and days, but you can start with something like this:

select id, case when vaccine_code like '%1A%' then 'dose1'
            when vaccine_code like '%2A%' then 'dose2'
            when vaccine_code = 'moderna' and vaccine_day = min(vaccine_day) then 'dose1'
            when vaccine_code = 'moderna' and vaccine_day = max(vaccine_day) then 'dose1'
       end as vaccine_dose
from tbl
group by id, vaccine_code;
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading