如何添加计算列以显示一对多关系中匹配行的总数
how can I add a calculated column that would show the total # of matching rows in a one-to-many relationship
我有两个具有一对多关系的 table。我想创建一个计算列 Table1,它显示 Table2 中的行数,如下所示。
我如何使用 MS Access 执行此操作?我知道我可以使用查询,但我希望在 table 本身中显示它。
╔═════════════════════════════╗
║ Table1 ║
╠════╦══════╦═════════════════╣
║ ID ║ name ║ count in Table2 ║
╠════╬══════╬═════════════════╣
║ 1 ║ a ║ 1 ║
║ 2 ║ b ║ 4 ║
║ 3 ║ c ║ 1 ║
║ 4 ║ d ║ 3 ║
║ 5 ║ e ║ 1 ║
╚════╩══════╩═════════════════╝
╔══════════════════════════╗
║ Table2 ║
╠════╦═════════╦═══════════╣
║ ID ║ name ║ Table1 ID ║
╠════╬═════════╬═══════════╣
║ 1 ║ alpha ║ 2 ║
║ 2 ║ bravo ║ 4 ║
║ 3 ║ charlie ║ 4 ║
║ 4 ║ delta ║ 3 ║
║ 5 ║ dingo ║ 2 ║
║ 6 ║ mango ║ 2 ║
║ 7 ║ pancake ║ 1 ║
║ 8 ║ banana ║ 2 ║
║ 9 ║ cookie ║ 5 ║
║ 10 ║ fart ║ 4 ║
╚════╩═════════╩═══════════╝
您可以使用子查询。像这样:
select id, [name], (select count(*) from table2 where table1.id = table2.table1_id) as [count in table2] from table1
正在回答以供将来参考,但这是不可能的。 MS Access 中的计算列无法使用查询,none 个可用函数可用于执行此操作。
我没有 Access 2010 来对此进行测试,但一种可能的途径是域函数 DCount
(https://support.office.com/en-ca/article/DCount-Function-f6b5d78b-ad0b-4e42-be7a-11a64acbf3d3):
在计算字段表达式中,您可以使用:
DCount("*","Table2","[Table1 ID]=" & [Table1].[ID])
这适用于查询:
SELECT
Table1.*,
DCount("*","Table2","[Table1 ID]=" & [Table1].[ID]) AS ForeignCount
FROM Table1;
但是,我认为这是您应该超越是否可以并考虑是否应该考虑的情况之一。计算字段不属于表,它们属于查询或表示层。
我有两个具有一对多关系的 table。我想创建一个计算列 Table1,它显示 Table2 中的行数,如下所示。
我如何使用 MS Access 执行此操作?我知道我可以使用查询,但我希望在 table 本身中显示它。
╔═════════════════════════════╗
║ Table1 ║
╠════╦══════╦═════════════════╣
║ ID ║ name ║ count in Table2 ║
╠════╬══════╬═════════════════╣
║ 1 ║ a ║ 1 ║
║ 2 ║ b ║ 4 ║
║ 3 ║ c ║ 1 ║
║ 4 ║ d ║ 3 ║
║ 5 ║ e ║ 1 ║
╚════╩══════╩═════════════════╝
╔══════════════════════════╗
║ Table2 ║
╠════╦═════════╦═══════════╣
║ ID ║ name ║ Table1 ID ║
╠════╬═════════╬═══════════╣
║ 1 ║ alpha ║ 2 ║
║ 2 ║ bravo ║ 4 ║
║ 3 ║ charlie ║ 4 ║
║ 4 ║ delta ║ 3 ║
║ 5 ║ dingo ║ 2 ║
║ 6 ║ mango ║ 2 ║
║ 7 ║ pancake ║ 1 ║
║ 8 ║ banana ║ 2 ║
║ 9 ║ cookie ║ 5 ║
║ 10 ║ fart ║ 4 ║
╚════╩═════════╩═══════════╝
您可以使用子查询。像这样:
select id, [name], (select count(*) from table2 where table1.id = table2.table1_id) as [count in table2] from table1
正在回答以供将来参考,但这是不可能的。 MS Access 中的计算列无法使用查询,none 个可用函数可用于执行此操作。
我没有 Access 2010 来对此进行测试,但一种可能的途径是域函数 DCount
(https://support.office.com/en-ca/article/DCount-Function-f6b5d78b-ad0b-4e42-be7a-11a64acbf3d3):
在计算字段表达式中,您可以使用:
DCount("*","Table2","[Table1 ID]=" & [Table1].[ID])
这适用于查询:
SELECT
Table1.*,
DCount("*","Table2","[Table1 ID]=" & [Table1].[ID]) AS ForeignCount
FROM Table1;
但是,我认为这是您应该超越是否可以并考虑是否应该考虑的情况之一。计算字段不属于表,它们属于查询或表示层。