在文本框中显示所有表时分组依据和计数查询

时间:2016-06-05 10:19:37

标签: sql vba ms-access

我是一个ms访问和sql的新手。我想要做的是在表单上搜索表中的名称,并按PersonID分组,该表存在于两个表中,同时显示table_1中的所有属性。金额不是原始表中的实际属性,我希望得到它的数量。我使用的代码是:

Dim query As String

query = "Name LIKE '*" & Me.txtSearchName & "*' AND Name <> '0'"
Me.RecordSource = "SELECT PersonID, Name, Mail, City,
COUNT(*) AS Amount FROM Table 1 GROUP BY PersonID HAVING COUNT(*) >= 0"
Me.Filter = query
Me.FilterOn = True

TABLE_1

PersonID|Name  |Mail    |City   |Amount
1       |John  |j@.com  |A      |5
2       |Mark  |m@.com  |B      |2
3       |Lisa  |l@.com  |C      |4

表中显示的金额是计算table_2中PersonID的计数。

TABLE_2

RestaurantID|PersonID|Date        |City   
1           |1       |23/05/2016  |X     
2           |2       |27/06/2015  |Y      
3           |2       |28/05/2016  |Y 

我通过搜索获得了成功,但获得金额是一种痛苦,因为我不想要组中的所有属性。我试过了:

SELECT Count(*)
FROM (
SELECT *
FROM Table_1 t1, Table_2 t2
WHERE t1.PersonID = t2.PersonID)
GROUP BY t1.PersonID 
HAVING Count(*) >= 0

但它只是不起作用并继续给出错误“邮件不是聚合函数的一部分”或其他一些属性而不是Mail。我只想计算每个PersonID的餐厅访问量。

2 个答案:

答案 0 :(得分:1)

您不需要HAVING子句,INNER JOIN会过滤IDTable_2不存在的所有行:

SELECT t1.PersonID, t1.Name, t1.Mail, t1.City,Count(*)
FROM Table_1 t1
INNER JOIN Table_2 t2
 ON (t1.PersonID = t2.PersonID)
GROUP BY t1.PersonID, t1.Name, t1.Mail, t1.City

请避免使用隐式连接语法(逗号分隔)并仅使用连接的正确语法(如我的答案中所提供)。

答案 1 :(得分:0)

考虑在连续表单(绑定到table_1)的新文本框中使用DCount公式计算table_2中对应于行记录PersonID的PersonID:

=DCount("*", "table_2", "PersonID=" & [PersonID])