首页 > 解决方案 > 有没有办法使用 SQL 在 Microsoft Access 中添加/相乘聚合函数?

问题描述

我的目标是让我的 Access 查询为我做尽可能多的数学运算。有没有办法添加/多重(或在此原因中划分)聚合函数并在列中显示输出?

例子:

SELECT   
SUM(dbo.tbl1.TYsales) AS TY, SUM(dbo.tbl1.LYsales) AS LY,
SUM(dbo.tbl1.TYsales) + SUM(dbo.tbl1.LYsales) AS [TY_LY], 
SUM(dbo.tbl1.LYsales) + SUM(dbo.tbl1.YBLsales) AS [LY_YBL] ,
SUM(TY_LY)/ SUM(LY_YBL)

我知道这可能很遥远。我是 SQL 和 Access 的新手。

谢谢你

标签: sqlms-accessaggregateaggregate-functions

解决方案


由于聚合在特定级别运行,因此您需要使用派生表或第二个查询来获取第一个聚合。给定基于集合的表框架,所有数据库都是如此:

SELECT SUM(TY_LY) / SUM(LY_YBL) AS final_result
FROM 
   (SELECT   
          SUM(dbo_tbl1_TYsales) AS TY, SUM(dbo_tbl1_LYsales) AS LY,
          SUM(dbo_tbl1_TYsales) + SUM(dbo_tbl1_LYsales) AS [TY_LY], 
          SUM(dbo_tbl1_LYsales) + SUM(dbo_tbl1_YBLsales) AS [LY_YBL] ,
    FROM mytable) t

或者使用多个查询:

查询 1

SELECT SUM(dbo_tbl1_TYsales) AS TY, SUM(dbo_tbl1_LYsales) AS LY,
       SUM(dbo_tbl1_TYsales) + SUM(dbo_tbl1_LYsales) AS [TY_LY], 
       SUM(dbo_tbl1_LYsales) + SUM(dbo_tbl1_YBLsales) AS [LY_YBL]
FROM mytable

查询 2

SELECT SUM(TY_LY) / SUM(LY_YBL) AS final_result
FROM Query1

也许有一天,Microsoft Access 团队会将 JET/ACE SQL 方言(~准 ANSI-1989)推进到当前的 ANSI 标准,并实现 CTE(在 ANSI-1999 中引入)甚至窗口函数(在 ANSI-2003 中引入)。

注意:以下不适用于任何 MS Access 版本(作为演示发布)。

WITH cte AS
   (SELECT   
      SUM(dbo_tbl1_TYsales) AS TY, SUM(dbo_tbl1_LYsales) AS LY,
      SUM(dbo_tbl1_TYsales) + SUM(dbo_tbl1_LYsales) AS [TY_LY], 
      SUM(dbo_tbl1_LYsales) + SUM(dbo_tbl1_YBLsales) AS [LY_YBL] ,
    FROM mytable)

SELECT SUM(TY_LY) / SUM(LY_YBL)  AS final_result
FROM cte;

推荐阅读