SQL 服务器、Having 子句、Where、聚合函数

SQL Server, Having Clause, Where, Aggregate Functions

在我试图解决的问题中,有一个性能值 table:

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, 我想计算每个员工的平均绩效。

上面的代码在不考虑日期过滤器的情况下给出了平均值。

谢谢。

除了你的加入条件和 table 看起来很复杂的名字,一个简单的问题,如果你想要特定日期的结果,那么为什么需要

WHERE tbl_StaffPerformancesValues.Date >= @DateFrom

正如您所说,您的查询显示的是平均结果,但不是日期实例。将以上行更改为 WHERE tbl_StaffPerformancesValues.Date = @DateFrom.

如果我错了请纠正我。

感谢您的回复,上面的代码,正如大家所说,也是预期的那样是正确的。

我打算有一个日期过滤器来查看从给定日期到现在的结果。

密码

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 天前到现在一直在获取性能值。所以平均值是错误的。

再次感谢。