我是一个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的餐厅访问量。
答案 0 :(得分:1)
您不需要HAVING
子句,INNER JOIN
会过滤ID
中Table_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])