尝试执行不包含指定表达式“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 关键字(如 SELECTFROM 用作表名)(无论如何这都是不好的做法)时,这些都是必需的。

此外,如果您在某些列上使用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'作为聚合函数的一部分。我该如何绕过?

访问更新查询:查询不包含指定表达式作为聚合函数的一部分

Access Query + 您的查询不包含指定表达式“TimeID”作为聚合函数的一部分

指定的 LINQ 表达式包含对与不同上下文关联的查询的引用

正则表达式 如何完成匹配某个字符串 但是不包含指定字符串