0

以下のクエリで、2 つの列の結果を追加し、合計列に基づいて「時間通り」列に計算を実行しようとしています。結果として私が欲しいのはこれらの列です:

Appraiser 'OntimeSum' 'PastDueSum' 'Ontime + afterdue' '%ontime'

以下のクエリにはすでに最初の 3 つがありますが、他の方法はわかりません。また、それらを理解したり、どこにも例を見つけたりすることはできません。

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
4

1 に答える 1

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)

また、>= と <= の両方を使用しているため、現在のクエリはオーバーカウントされます。ちょうど同じ時間に起こったことが遅れているかどうかを判断するのは良いことです.

于 2012-04-22T06:36:00.450 に答える