sql - 如何计算两个表的列值之间的差异

标签 sql ms-access

我有两张 table :T_Guest、T_Table

T_Guest中,我有一个客人名单。每个客人都有一个 ID (g_no) 和与该客人相关的餐 table ID (t_no)。 同一张 table 可能有很多客人。

T_Table中,我有一个表格列表。每个表都有一个 ID (t_no) 和一个描述该表有多少个地点的字段 n_places

问题: 我需要构建一个 SQL 查询(在 MS Access 中),它将显示仍然有空闲位置的表 ID 的列表。


我有一个想法,首先找到已满的表的列表,而不仅仅是从整个可用表组中对该组实现异常。

但是要计算有多少张表有零个可用位置,我需要以某种方式计算每个表:

n_places - NUMBER_OF_GUESTS_ON_THAT_TABLE

最后一个 (NUMBER_OF_GUESTS_ON_THAT_TABLE) 只是:

SELECT COUNT(*)
FROM T_Table INNER JOIN T_Guest ON T_Table.t_no = T_Guest.t_no
GROUP BY T_Table.t_no

但我不知道如何实现差异n_places - NUMBER_OF_GUESTS_ON_THAT_TABLE

有人可以帮我完成这样的任务吗???

最佳答案

您可以使用客人计数作为派生表:

SELECT t.t_no, t.n_Places-Nz(g.Guests,0) As FreePlaces
FROM T_Table t
LEFT JOIN (
    SELECT t_no,COUNT(*) as Guests
    FROM T_Guest 
    GROUP BY t_no) g
ON t.t_no = g.t_no

要获取带有空格的表格,您可以添加:

WHERE t.n_Places-Nz(g.Guests,0)>0

关于sql - 如何计算两个表的列值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972767/

相关文章:

ms-access - MS-access报告-保存时未在任何记录中找到搜索关键字

mysql - 我是否需要复制触发器来覆盖插入前和更新前场景?

mysql - 使用 OR 条件内连接两个表

sql - SQL 数据库的良好引用 + 功能/语法比较矩阵?

ms-access - 确保 Access 2000 mdb 上的 SQL-92 到 Access 2010 下的 SQL Server

sql - 从 Access 中的日期时间字段中选择时间范围

sql - 更改表列以接受更多字符

mysql - 检查时间重叠表?

java - 无效的日期时间格式 : insert date/time into Access from Java

sql - 如何计算不同表中ID的出现次数