MS Access多表查询需求:按Sec ID汇总Trades与Transfers的Quantity
MS Access 查询语句:合并Trades与Transfers表的数量汇总并关联SecurityInfo
实现思路
先分别对Trades和Transfers表按Sec ID做数量汇总,用UNION ALL合并两个汇总结果,再对合并后的数据按Sec ID求和得到总数量,最后关联SecurityInfo表获取对应字段。
完整SQL语句
SELECT si.[Sec ID], si.symbol, si.description, Nz(t.TotalQuantity, 0) AS TotalQuantity FROM SecurityInfo si LEFT JOIN ( SELECT [Sec ID], SUM(quantity) AS TotalQuantity FROM ( SELECT [Sec ID], quantity FROM Trades UNION ALL SELECT [Sec ID], quantity FROM Transfers ) AS Combined GROUP BY [Sec ID] ) t ON si.[Sec ID] = t.[Sec ID];
关键细节说明
- UNION ALL:相比
UNION不会自动去重,执行效率更高,能完整保留所有交易和转账的数量数据用于后续汇总 - Nz(t.TotalQuantity, 0):针对没有交易/转账记录的证券,将空值替换为0,避免结果显示为
Null - LEFT JOIN:确保
SecurityInfo表中的所有证券记录都能被展示,即使该证券没有对应的交易或转账数据
内容的提问来源于stack exchange,提问作者bigaeon
相关产品推荐
相关产品推荐

