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 天前到现在一直在获取性能值。所以平均值是错误的。
再次感谢。
在我试图解决的问题中,有一个性能值 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 天前到现在一直在获取性能值。所以平均值是错误的。
再次感谢。