尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分
Posted
技术标签:
【中文标题】尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分【英文标题】:Tried to execute a query that does not include the specified expression 'StaffDetails.StaffID' as part of an aggregate function 【发布时间】:2014-01-24 19:40:49 【问题描述】:我有一个名为 DGHours 的数据网格,我想用下面的 SQL 填充它。但是,我收到了错误消息“附加信息:您尝试执行的查询不包含指定表达式“StaffDetails.StaffID”作为聚合函数的一部分。我不明白我的sql有什么问题,有什么帮助吗?我希望数据网格按内部连接的 staffID 显示 StaffID、FirstName、LastName 和总小时数。我认为问题与 SUM(TimeSheet.Hours) 有关。
Dim SqlQuery As String = "SELECT [StaffDetails.StaffID], [StaffDetails.FirstName], [StaffDetails.LastName], [TimeSheet.StaffID], SUM(TimeSheet.Hours) FROM [StaffDetails] INNER JOIN [TimeSheet] ON [StaffDetails].StaffID = [TimeSheet].StaffID WHERE [TimeSheet].TimeSheetMonth='" & cbMonth.Text & "'"
Dim da As OleDbDataAdapter = New OleDbDataAdapter(SqlQuery, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds, "Hours")
Dim dt As DataTable = ds.Tables("Hours")
With DGHours
.AutoGenerateColumns = True
.DataSource = ds
.DataMember = "Hours"
End With
【问题讨论】:
【参考方案1】:如果你使用方括号,它们应该包括每个单独的组件,如表名或列名,而不是全部:使用 e。 G。 [StaffDetails].[StaffID]
而不是 StaffDetails.StaffID]
。
但在您的情况下,您也可以省略语句中的所有方括号。只有在表或列名中有空格、逗号等特殊字符,或者如果您将 SQL 关键字(如 SELECT
或 FROM
用作表名)(无论如何这都是不好的做法)时,这些都是必需的。
此外,如果您在某些列上使用Sum
之类的聚合函数,则需要在其他列上使用GROUP BY
,即。 e.对于您的查询,您必须附加
GROUP BY StaffDetails.StaffID,
StaffDetails.FirstName,
StaffDetails.LastName,
TimeSheet.StaffID
到您的查询结束。
【讨论】:
谢谢,还是不行,我认为问题出在 SUM 上? 这么喜欢? Dim SqlQuery As String = "SELECT [StaffDetails.StaffID], [StaffDetails.FirstName], [StaffDetails.LastName], [TimeSheet.StaffID], SUM(TimeSheet.Hours) FROM [StaffDetails] INNER JOIN [TimeSheet] ON [StaffDetails] .StaffID = [TimeSheet].StaffID WHERE [TimeSheet].TimeSheetMonth='" & cbMonth.Text & "' GROUP BY StaffDetails.StaffID, StaffDetails.FirstName, StaffDetails.LastName, TimeSheet.StaffID" @Hayden 是的,但请注意方括号! 成功了!杰出的!谢谢以上是关于尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分的主要内容,如果未能解决你的问题,请参考以下文章
我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过?