由于某些原因,在Access 2010中使用分组依据的选择查询中使用日期/时间字段(记录未正确“按”分组“文本字段”,多次显示相同的“aTextField”值)。我能够在一个简单的一个表查询中复制该问题。例如:
SELECT aTextField, SUM(aIntField) AS SumOfaIntField
FROM simpleTable
GROUP BY aTextField, aDateField
HAVING aDateField >= Date()
ORDER BY aTextField;
只要从查询中删除“aDateField”(Group By和Having行),它就能正常工作。我甚至可以移除HAVING线并且它仍然会断裂。让我相信它与Group By有关。
任何反馈都会很棒。谢谢!
编辑更多详情
**simpleTable**
--------------------------------------------
| ID | aTextField | aIntField | aDateField |
============================================
| 1 | John Doe | 1 | 3/14/2013 |
| 2 | John Doe | | 3/15/2013 |
| 3 | Jane Doe | 1 | 3/15/2013 |
| 4 | John Doe | 2 | 3/18/2013 |
| 5 | Jane Doe | 1 | 3/19/2013 |
| 6 | John Doe | | 3/20/2013 |
| 7 | John Doe | 3 | 3/21/2013 |
| 8 | Jane Doe | 1 | 3/19/2013 |
| 9 | John Doe | | 3/22/2013 |
| 10 | Jane Doe | 2 | 3/20/2013 |
| 11 | Jane Doe | | 3/21/2013 |
| 12 | Jane Doe | | 3/22/2013 |
--------------------------------------------
**Expected Result**
-------------------------------
| aTextField | SumOfaIntField |
===============================
| Jane Doe | 4 |
| John Doe | 3 |
-------------------------------
**Actual Result**
-------------------------------
| aTextField | SumOfaIntField |
===============================
| Jane Doe | 2 |
| Jane Doe | 2 |
| Jane Doe | |
| Jane Doe | |
| John Doe | |
| John Doe | 3 |
| John Doe | |
-------------------------------
所以似乎正在发生的事情是每个日期也有一个单独的行。我只需按日期过滤,而不一定按分组过滤。但是,Access不会在不对其进行分组的情况下接受查询。选项?
答案 0 :(得分:2)
您按aTextField
和aDateField
进行分组。也许simpleTable
包括日期相同的行,但是时间不同。在这种情况下,您的分组会为每个日期/时间组合生成一行。
无论是否是解释,您应该通过在aDateField
列表中包含SELECT
来检查数据库引擎实际评估的内容。
SELECT aTextField, aDateField, SUM(aIntField)
FROM simpleTable
GROUP BY aTextField, aDateField
HAVING aDateField >= Date()
ORDER BY aTextField;
另请考虑使用WHERE
代替HAVING
子句:
WHERE aDateField >= Date()
根据您的样本数据,我怀疑您想......
SELECT aTextField, SUM(aIntField)
FROM simpleTable
GROUP BY aTextField
WHERE aDateField >= Date()
ORDER BY aTextField;
答案 1 :(得分:1)
您应该可以使用以下内容:
SELECT aTextField, SUM(aIntField) AS SumOfaIntField
FROM simpleTable
WHERE aDateField >= Date()
GROUP BY aTextField
ORDER BY aTextField;
您会注意到我删除了GROUP BY
列上的aDateField
。由于您需要每个aTextField
的总计,因此您无需按日期分组。按日期分组将为每个不同的日期生成单独的行。
注意:此查询已在MS Access 2010中进行了测试,并生成了所需的结果。
答案 2 :(得分:0)
我认为你对GROUP BY如何运作有误解。对于每个唯一的文本字段/日期时间组合,您应该看到相同的aTextField
<强>示例强>
a 2012-01-01
a 2012-01-01
b 2012-01-01
b 2012-01-02
b 2012-01-02
分组由aTextField,aDateField
组成a 2012-01-01
b 2012-01-01
b 2012-01-02
按aTextField分组
a
b