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

Select Statement Ratio Calculation Not Working as Expected

I am trying to create a query that will give me a ratio calculation based on certain counts from two columns which are working however unless there is data in the table, it won’t be able to calculate a ratio.

To mitigate this I want my script to convert all null values to a 1.

This is my current script (I’m removing the rest of the joins because it isn’t necessary to include)

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

SELECT DISTINCT TB1.Person,
TB2.AllocatedCount as AllocatedCount,
TB3.UnallocatedCount as UnallocatedCount,
AllocatedCount * 1.0 / UnallocatedCount * 1.0 as Ratio,

The above yields the following results which work perfectly provided the table has data for both columns:

Person AllocatedCount UnallocatedCount Ratio
A 1 1 1.0000000000000
B 2 1 2.0000000000000
C null null null

I want to change the script so that all null results would represent the number 1 however the ratio doesnt seem to be calculating.

SELECT DISTINCT TB1.Person,
CASE WHEN TB2.AllocatedCount IS NULL THEN 1 ELSE TB2.AllocatedCount as AllocatedCount,
CASE WHEN TB3.UnallocatedCount IS NULL THEN 1 ELSE TB3.UnallocatedCount as UnallocatedCount,
AllocatedCount * 1.0 / UnallocatedCount * 1.0 as Ratio,

Above yields the following results:

Person AllocatedCount UnallocatedCount Ratio
A 1 1 1.0000000000000
B 2 1 2.0000000000000
C 1 1 null

Any idea what I’m doing wrong with my script to not calculate the ratio?

>Solution :

You also need to check for NULL values when you calculate the ratio (using ISNULL() here is probably a better option):

SELECT 
   DISTINCT TB1.Person,
   ISNULL(TB2.AllocatedCount, 1) AS AllocatedCount,
   ISNULL(TB3.UnallocatedCount, 1) AS UnallocatedCount,
   ISNULL(TB2.AllocatedCount, 1) * 1.0 / ISNULL(TB3.UnallocatedCount, 1) * 1.0 AS Ratio
FROM 
   ...
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