Sql 通过将sum(case)语句中的两列相除来获取百分比

Sql 通过将sum(case)语句中的两列相除来获取百分比,sql,tsql,case,aggregate,Sql,Tsql,Case,Aggregate,我正在尝试添加两列的结果,并在下面的查询中,根据总计列对准时列进行计算。因此,我想要的是以下列: 评估人“OntimeSum”“PastDueSum”“Ontime+pastdue”“%Ontime” 我已经在下面的查询中找到了前三个,但是我不知道如何做其他的,而且似乎无法找出它们,或者在任何地方都找不到示例 WITH AppraiserTurnTime AS (SELECT (v.ContactLastName+ ', ' +v.ContactFirstName) AS Appraiser

我正在尝试添加两列的结果,并在下面的查询中,根据总计列对准时列进行计算。因此,我想要的是以下列:

评估人“OntimeSum”“PastDueSum”“Ontime+pastdue”“%Ontime”

我已经在下面的查询中找到了前三个,但是我不知道如何做其他的,而且似乎无法找出它们,或者在任何地方都找不到示例

WITH AppraiserTurnTime AS
(SELECT (v.ContactLastName+ ', ' +v.ContactFirstName) AS Appraiser

   ,SUM(CASE WHEN oi.SubmittedDate <= oi.AssignedDate THEN 1 ELSE 0 END) AS OnTime
   ,SUM(CASE WHEN oi.SubmittedDate >= oi.AssignedDate THEN 1 ELSE 0 END) AS PastDue


FROM OrderItems oi
JOIN Vendors v ON v.VendorID = oi.VendorID
JOIN VendorClasses vc ON vc.VendorClassID = v.VendorClassID

WHERE vc.VendorClassID in (6, 3)
GROUP BY ContactFirstName,v.ContactLastName)

SELECT * FROM AppraiserTurnTime

你差不多明白了

(2)   ,SUM(CASE WHEN oi.SubmittedDate <= oi.AssignedDate THEN 1 ELSE 0 END) AS OnTime
(3)   ,SUM(CASE WHEN oi.SubmittedDate >= oi.AssignedDate THEN 1 ELSE 0 END) AS PastDue

另外,当前查询将计算过多,因为您同时使用>=和感谢我得到了总数,但另一方面遇到了除以0的问题。试图使用此方法解决此问题,但当oi.SubmittedDate
SELECT ..., OnTime+PastDue, etc.
FROM ( your original query)