我有一个名为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
答案 0 :(得分:1)
如果使用方括号,它们应该包括每个单独的组件,如表名或列名,而不是整个事物:使用e。 G。 [StaffDetails].[StaffID]
代替StaffDetails.StaffID]
。
但在你的情况下,你也可以省略语句中的所有方括号。只有在表名或列名中有空格,逗号等特殊字符,或者如果使用SELECT
或FROM
之类的SQL关键字作为表名(这很糟糕)时,才需要这些无论如何都要练习。)
此外,如果您在某些列上使用Sum
等聚合函数,则需要GROUP BY
其他列,i。即对于您的查询,您必须附加
GROUP BY StaffDetails.StaffID,
StaffDetails.FirstName,
StaffDetails.LastName,
TimeSheet.StaffID
到查询结尾。