Есть ли способ добавить / умножить агрегатные функции в Microsoft Access, используя SQL? - PullRequest
0 голосов
/ 29 ноября 2018

Моя цель - сделать так, чтобы мой запрос 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.

спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

Поскольку агрегации выполняются на определенных уровнях, вам необходимо использовать производную таблицу или второй запрос, который является источником первой агрегации.Это верно для всех баз данных с учетом основанной на множестве структуры таблиц:

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 однажды продвинет диалект SQL JET / ACE (~ quasi 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;
...