2012-04-22 53 views
0

我试图添加两列的结果,并根据下列查询中“按时”列的总列进行计算。我要的结果是这些列:从总和(大小写)语句中除以两列得到百分比

评估师“OntimeSum'PastDueSum'龙泰+ pastdue“%准时”

我已经在下面的查询前三,但我不知道如何做其他人,似乎无法找到他们或找到任何地方的例子。

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 

回答

0

你已经明白了。

(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 

总量将是(2)+(3),%准时将是(2)/((2)+(3))

您可以插入用于查询(2)和上述(3)对于每个度量标准,或者如果需要,创建嵌套查询,以便可以参考的列即

SELECT ..., OnTime+PastDue, etc. 
FROM (your original query) 

此外,因为您同时使用> =和< =当前查询将超量。最好决定是否在某一确切时间发生的事情是否过期。

+0

谢谢我得到了总的工作,但遇到了另一个分歧0问题。试图通过使用这个解决方案,但所有这一切返回在每一行是0。 – wondergoat77 2012-04-22 06:51:48

+0

(SUM(CASE WHEN oi.SubmittedDate <= oi.AssignedDate THEN ELSE 1 0 END))/ NULLIF( \t(SUM(CASE WHEN oi.SubmittedDate <= oi.AssignedDate THEN ELSE 1 0 END))+ \t( SUM(CASE WHEN oi.SubmittedDate> oi.AssignedDate THEN 1 ELSE 0 END)),0)AS百分比 – wondergoat77 2012-04-22 06:52:08

+0

请看COALESCE – dfb 2012-04-22 15:14:15