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

SQL CASE AND DISTINCT

I have a table like this

this is just a sample of my table

ID PRSNO QTY DESC STATUS
1 TEST1 1 Pen Ontime
2 TEST1 1 Eraser Delay
3 TEST1 1 Scissor Ontime
ID PRSNO QTY DESC STATUS
4 TEST2 1 Pen Delay
5 TEST2 1 Notebook Delay
6 TEST2 1 Pentelpen Delay
ID PRSNO QTY DESC STATUS
7 TEST3 1 Pen Ontime
8 TEST3 1 Notebook Ontime
9 TEST3 1 Pentelpen Delay
9 TEST3 1 Pentelpen Delay
ID PRSNO QTY DESC STATUS
7 TEST4 1 Keyboard Delay
8 TEST4 1 Mouse Ontime
9 TEST4 1 Monitor Delay
9 TEST4 1 CPU Delay

but my problem is i want to display this like this

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

PRSNO STATUS
TEST1 Ontime
TEST2 Delay
TEST3 Ontime
TEST4 Delay

I just know how to distinct the PRSNO but i dont know how to calculate the status where
if Ontime <= Delay
Ontime
else
Delay

My code is only for distinct

SELECT DISTINCT PRSNO FROM prsystem

>Solution :

You can try to use aggregate condition function compare count by Ontime and Delay from STATUS column

Query #1

SELECT PRSNO,
       CASE WHEN 
       COUNT(CASE WHEN STATUS = 'Ontime' THEN 1 END) >= 
            COUNT(CASE WHEN STATUS = 'Delay' THEN 1 END)  THEN 'Ontime' 
                ELSE 'Delay'  END STATUS
FROM prsystem
GROUP BY PRSNO;
PRSNO STATUS
TEST1 Ontime
TEST2 Delay
TEST3 Ontime
TEST4 Delay

View on DB Fiddle

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