Sql 具有特定值的计数列

Sql 具有特定值的计数列,sql,Sql,我希望在下面的查询中计算患者全名准时赴约的时间百分比。理论上,我可以计算出时间值的多少倍,以及延迟的多少倍,然后将延迟乘以时间,再乘以100得到百分比,但我无法计算出将计算结果显示在一列中,然后根据患者的准时分数百分比对患者进行分组所需的合成度 查询示例: SELECT Db.Full_Name, CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.

我希望在下面的查询中计算患者全名准时赴约的时间百分比。理论上,我可以计算出时间值的多少倍,以及延迟的多少倍,然后将延迟乘以时间,再乘以100得到百分比,但我无法计算出将计算结果显示在一列中,然后根据患者的准时分数百分比对患者进行分组所需的合成度

查询示例:

SELECT 

Db.Full_Name,
CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0 THEN 'LATE' ELSE 'ON-TIME' END AS STATUS,

FROM Db

WHERE Db.DOCTOR_APPOINTMENT_DATE between to_date('10/30/2018','MM/DD/YYYY') and to_date ('12/30/2018','mm/dd/yyyy')
我希望它能做什么:

Full_Name:         % on time:
John Brown          75%
James White         25%
John Smith          66%

谢谢你的时间

您可以为此使用聚合,尤其是平均值:


sum案例陈述在这里很有效。您只需在每次医生/患者准时时进行计数和相加。然后你需要知道所有约会的总和才能得到准确的百分比。我不会对单行使用平均值


用你正在使用的数据库标记你的问题。我认为这是我需要的正确方向,但我认为我在GROUPBY子句中遇到了错误。
Full_Name:         % on time:
John Brown          75%
James White         25%
John Smith          66%
SELECT Db.Full_Name,
       AVG(CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0
                THEN 1.0 ELSE 0.0
           END) as late_ratio
FROM Db
WHERE Db.DOCTOR_APPOINTMENT_DATE BETWEEN DATE '2018-10-30 AND DATE '2018-12-30'
GROUP BY db.Full_Name
     SELECT 

    Db.Full_Name,

    SUM( 
       CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) +
   (Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0 THEN 0 ELSE 1 END

) AS OnTimeCount


--*********************************************
-- insert logic to count the total appointments and divide.**

 , count(somefield) as AppointmentCount

 --******************************
 -- loose example ---

, ( OnTimeCount /  Cast(AppointmentCount as float)) * 100 as OnTimeRatio
FROM Db

WHERE Db.DOCTOR_APPOINTMENT_DATE between to_date('10/30/2018','MM/DD/YYYY') and to_date ('12/30/2018','mm/dd/yyyy')