试图执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分

时间:2014-01-24 19:40:49

标签: mysql sql vb.net ms-access

我有一个名为DGHours的数据网格,我希望用下面的SQL填充它。但是我收到了错误消息“附加信息:您试图执行不包含指定表达式'StaffDetails.StaffID'的查询作为聚合函数的一部分。”我不明白我的sql有什么问题,有什么帮助吗?我希望数据网格显示StaffID,FirstName,LastName以及内部联接staffID的总小时数。我认为问题与 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 个答案:

答案 0 :(得分:1)

如果使用方括号,它们应该包括每个单独的组件,如表名或列名,而不是整个事物:使用e。 G。 [StaffDetails].[StaffID]代替StaffDetails.StaffID]

但在你的情况下,你也可以省略语句中的所有方括号。只有在表名或列名中有空格,逗号等特殊字符,或者如果使用SELECTFROM之类的SQL关键字作为表名(这很糟糕)时,才需要这些无论如何都要练习。)

此外,如果您在某些列上使用Sum等聚合函数,则需要GROUP BY其他列,i。即对于您的查询,您必须附加

GROUP BY StaffDetails.StaffID,
         StaffDetails.FirstName,
         StaffDetails.LastName,
         TimeSheet.StaffID

到查询结尾。