2012-04-22 57 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