SQL Server,有子句,Where,Aggregate Functions

时间:2016-02-29 04:16:56

标签: sql-server function aggregate where 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, 我想计算每位员工的平均表现。

上面的代码给出了我的平均值而不考虑日期过滤器。

谢谢。

2 个答案:

答案 0 :(得分:1)

除了你的连接条件和表名看起来相当复杂,一个简单的问题,如果你想要特定日期的结果,那么为什么需要

WHERE tbl_StaffPerformancesValues.Date >= @DateFrom

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

如果我错了,请纠正我。

答案 1 :(得分: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天之前就已经获得了性能值。所以平均值是错误的。

再次感谢。