2014-10-14 5 views
0

Я хочу рассчитать общее количество в одном из моих запросов доступа с использованием SQL (без DSUM, пожалуйста). У меня есть 3 поля в моем существующем запросе. А именно SubCategoryID, марка и доход и хотели бы рассчитать текущую сумму выручки по каждой подкатегории.Запуск Total in Ms-access query с использованием SQL

Я написал для этого запрос, но есть некоторая ошибка, и я не могу найти способ ее исправить.

SELECT x.SubCategoryID 
      ,x.brand 
      ,x.[Avg Revenue] 
       (Select Sum(x2.[Avg Revenue]) 
       From FROM [BrandRevenue] x2 
       Where x2.[SubCategoryID] = x.[SubCategoryID] AND x2.[Avg Revenue] <= x.[Avg Revenue]) As [Running Sum] 
    FROM (Select SubCategoryID, brand, [Avg Revenue] 
      FROM [BrandRevenue] 
      Order BY SubCategoryID, [Avg Revenue] DESC) As x 
    Group BY x.SubCategoryID, x.brand, x.[Avg Revenue]; 

Спасибо за помощь :)

+2

Не стесняйтесь поделиться тем, что такое ошибка? – gvee

+0

Ошибка синтаксиса в выражении запроса «Выберите сумму (x2. [Avg Revenue]) From FROM [BrandRevenue (Weekly)] x2 Где x2. [SubCategoryID] = x. [SubCategoryID] И x2. [Avg Revenue] <= x . [Avg Revenue]) – NiketD

ответ

1

Вы повторили «С» в вашем коррелированных подзапросов:

(Select Sum(x2.[Avg Revenue]) 
    From FROM [BrandRevenue] x2 
    ... 

Я не думаю, что вам нужно подзапрос в предложении из или GROUP BY. Я думаю, что это будет лучше, и, конечно, проще:

SELECT x.SubCategoryID, 
     x.brand, 
     x.[Avg Revenue], 
     ( SELECT SUM(x2.[Avg Revenue]) 
      FROM [BrandRevenue] x2 
      WHERE x2.[SubCategoryID] = x.[SubCategoryID] 
      AND  x2.[Avg Revenue] <= x.[Avg Revenue] 
     ) AS [Running Sum] 
FROM BrandRevenue AS x 
ORDER BY x.SubCategoryID, x.[Avg Revenue] DESC; 

ADDENUM

Я думаю, чтобы обойти проблемы брендов, имеющих один и тот же доход, что вам нужно будет добавить некоторую дополнительную логику ваш коррелированный подзапрос:

SELECT x.SubCategoryID, 
     x.brand, 
     x.[Avg Revenue], 
     ( SELECT SUM(x2.[Avg Revenue]) 
      FROM [BrandRevenue] x2 
      WHERE x2.[SubCategoryID] = x.[SubCategoryID] 
      AND ( x2.[Avg Revenue] <= x.[Avg Revenue] 
       OR (x2.[Avg Revenue] = x.[Avg Revenue] 
       AND x2.Brand <= x.Brand 
       ) 
     ) AS [Running Sum] 
FROM BrandRevenue AS x 
ORDER BY x.SubCategoryID, x.[Avg Revenue] DESC, x.Brand; 
+0

Это отлично работает! Большое спасибо :) – NiketD

+0

Одна проблема, однако, результат не так, как ожидалось, когда доход двух брендов одинаковый. Любая идея, как это решить? спасибо – NiketD

+0

Я добавил к ответу, который, надеюсь, решит проблему. – GarethD