select Cust_no, 100 * (sum(case when On-time= 'O' then 1 else 0 end) / count(Cust_no)) as Pct
from dbo.tableA
group by Cust_no
select Cust_no, 100.0 * (sum(case when On-time= 'O' then 1 else 0 end) * 1.0 / count(Cust_no)) as Pct
from dbo.tableA
group by Cust_no
Standard example is: Age and Birthdate in the same table is bad because one is a direct calculation of the other. You could end up with them getting out of sync. It is just unnecessary. Do the calculation in the application(s) that use the table.