2016-02-29 54 views
1

在我的問題,我正努力解決,有一個性能值表:SQL Server中,HAVING子句,其中,聚合函數

Staff  PerformanceID Date  Percentage 
-------------------------------------------------- 
StaffName1 1    2/15/2016 95 
StaffName1 2    2/15/2016 95 
StaffName1 1    2/22/2016 100 
... 
StaffName2 1    2/15/2016 100 
StaffName2 2    2/15/2016 100 
StaffName2 1    2/22/2016 100 

和SQL語句如下:

SELECT TOP (10)  
    tbl_Staff.StaffName, 
    ROUND(AVG(tbl_StaffPerformancesValues.Percentage), 0) AS AverageRating 
FROM     
    tbl_Staff 
INNER JOIN 
    tbl_AcademicTermsStaff ON tbl_Staff.StaffID = tbl_AcademicTermsStaff.StaffID 
INNER JOIN 
    tbl_StaffPerformancesValues ON tbl_AcademicTermsStaff.StaffID = tbl_StaffPerformancesValues.StaffID 
WHERE 
    (tbl_StaffPerformancesValues.Date >= @DateFrom) 
    AND (tbl_AcademicTermsStaff.SchoolCode = @SchoolCode) 
    AND (tbl_AcademicTermsStaff.AcademicTermID = @AcademicTermID) 
GROUP BY    
    tbl_Staff.StaffName 
ORDER BY    
    AverageRating DESC, tbl_Staff.StaffName 

我想要做的是,從給定的日期,例如02-22-2016, 我想計算每個工作人員的平均表現。

上面的代碼給了我平均數而不考慮日期過濾器。

謝謝。

+1

你的代碼有'WHERE tbl_StaffPerformancesValues.Date> = @ DateFrom'。不適用日期過濾器嗎?請澄清 –

+0

還是它應該是一個平等的條件? 'tbl_StaffPerformancesValues.Date = @DateFrom' – Squirrel

+0

Percentage的數據類型是什麼?如果它是整數,AVG()它會給你結果只有整數。所以ROUND()實際上沒有效果 – Squirrel

回答

0

感謝回覆,上面的代碼,正如你所說的那樣,因爲它也預計是正確的。

我打算有一個日期過濾器來查看從給定日期到現在的結果。

代碼

WHERE tbl_StaffPerformancesValues.Date >= @DateFrom 

是正確的。

我從編碼中發現的錯誤是,在另一塊,我有以下幾點:

Protected Sub TextBoxDateFrom_Text(sender As Object, e As System.EventArgs) Handles TextBoxDate.PreRender, TextBoxDate.TextChanged 
     Try 

      Dim strDate As String = Date.Parse(DatesOfWeekISO8601(2016, WeekOfYearISO8601(Date.Today))).AddDays(-7).ToString("dd/MM/yyyy") 

      If Not IsPostBack Then 
       TextBoxDate.Text = strDate 
      End If 

      SqlDataSourcePerformances.SelectParameters("DateFrom").DefaultValue = Date.Parse(TextBoxDate.Text, CultureInfo.CreateSpecificCulture("id-ID")).AddDays(-7) 

      GridViewPerformances.DataBind() 

     Catch ex As Exception 

     End Try 
End Sub 

我,無意間,應用.AddDays(-7)兩次。 我剛注意到它,並從我的代碼中刪除了第二個.AddDays(-7)

SqlDataSourcePerformances.SelectParameters("DateFrom").DefaultValue = Date.Parse(TextBoxDate.Text, CultureInfo.CreateSpecificCulture("id-ID")) 

由於這個錯誤,SQL代碼在14天之前獲得了性能值,直到現在。所以平均數是錯的。

再次感謝。

1
從您的加盟條件和表名看起來相當複雜,一個簡單的問題,

的一部分,如果你想爲一個特定日期的結果,那麼爲什麼是具有

WHERE tbl_StaffPerformancesValues.Date >= @DateFrom

正如你所說的,需要你查詢顯示平均結果,但不顯示日期實例。將上面的行更改爲WHERE tbl_StaffPerformancesValues.Date = @DateFrom

糾正我,如果我錯了。

+0

感謝您的回覆。 – Meliksah