1

前もって感謝します!!

これが私がこれまでに持っているものです:

特定の日付範囲における特定の所有者のタスクの合計量を個人別に選択しています。現在、各人のタスク数の正確な毎日の平均を取得しようとしています。

私が抱えている問題は、正確な平均ではなく、平均の最後に .00 を返し続けることです。たとえば、1 週間に 2 つのタスクがあるとします。平均値が 0.28 または 0.29 ではなく 0.00 になっています

SELECT 
   convert(nvarchar, COUNT(p.personID)) AS count,
   CONVERT(decimal(4, 2), COUNT(p.personID) / DATEDIFF(DAY, @startDate, @endDate)) AS average,
   p.personID,
   p.firstname,
   p.lastname,
   c.companyname
FROM   
   Tasks t
JOIN 
   Person p ON p.personID = t.personID
JOIN 
   Client c ON c.id = p.employer
JOIN
   Commission m ON m.ClientID = c.ID
WHERE  
   t.created BETWEEN @startDate AND @endDate
   AND m.owner IN ('John Doe')
GROUP BY 
   p.personID, p.firstname, p.lastname, c.companyname
ORDER BY 
   c.companyname, count DESC
4

1 に答える 1

2

enddate と startdate が同一の場合、0 による除算のエラーが発生することに注意してください。

問題は、COUNT(p.personID) と DATEDIFF(DAY,@startDate,@endDate) の両方が整数を返すことでした。2 つの整数を割ると、切り捨てられた 3 番目の整数が得られます。1.0 を掛けると、10 進数の値が得られます。

CONVERT(decimal(4,2),1.0*COUNT(p.personID)/DATEDIFF(DAY,@startDate,@endDate))
于 2013-08-07T19:17:14.177 に答える