在我试图解决的问题中,有一个性能值表:
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, 我想计算每位员工的平均表现。
上面的代码给出了我的平均值而不考虑日期过滤器。
谢谢。
答案 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天之前就已经获得了性能值。所以平均值是错误的。
再次感谢。