[英]How to compute difference between the values of thecolumns of two tables
我有两个表:T_Guest,T_Table
在T_Guest中,我有客人名单。 每间有一个表(T_NR中 )的ID(g_no)和ID到客户有关。 到同一张桌子可能会关联许多客人。
在T_Table中,我有一个表列表。 每个表都有一个ID( t_no )和一个字段n_places ,它描述该表确实有多少个位置。
问题: 我需要建立一个SQL查询(在MS Access中),该查询将显示表ID的列表,这些ID仍然有空位。
我有一个想法,首先要找到已满的表的列表,而不仅仅是在整个可用表组中对该组执行EXCEPTION。
但是要计算有几张桌子确实有零空位,我需要以某种方式为每张桌子计算:
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
但是我不怎么实现DIFFERENCE 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
SELECT [tt].[t_no]
FROM T_Table AS tt
WHERE (SELECT COUNT(*) FROM T_Guest AS tg WHERE tg.t_no = tt.t_no) < tt.n_places
应该可以访问,使用子查询,但是考虑到上下文,我认为这不会成为问题。
这是HAVING子句的经典用法:
SELECT t_no FROM T_Guest GROUP BY t_no
HAVING COUNT(*)<(SELECT T_Table.n_Places FROM T_Table WHERE T_Table.t_no=T_Guest.t_no)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.