Создание анализа отклонений (различий) в Microsoft Access - PullRequest
0 голосов
/ 28 января 2020

У меня есть конкретная задача c, с которой мне нужна помощь.

По сути, у меня есть таблица продаж:

Product_ID/No   Product_Name    Date          Revenue
       A              APPLE     01-01-20       50
       B              BANANA    01-01-20       100
       A              APPLE     15-12-19       50
       B              BANANA    15-12-19       150
       C              CHERRY    15-12-19       50
       A              APPLE     01-01-20       60

Мне нужно создать отчет по отклонениям (разница / движение) из этой таблицы на месячном уровне со следующими заголовками:

Product_ID/No   Product_Name    Current_Month   Previous_Month  Variance
    A             Apple             110         50               60
    B             Banana            100         150             -50
    C             Cherry            50          -50

Вопросы:

Как я могу это сделать?

Это будет серия SQL утверждений?

Любой совет будет оценен.

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 января 2020

этот запрос для SQL Сервер:

WITH Temp
AS (SELECT [Product_ID/No],
           [Product_Name],
           ISNULL(SUM(IIF(DATEPART(MONTH, GETDATE()) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Current_Month,
           ISNULL(SUM(IIF(DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())) = DATEPART(MONTH, [Date]), Revenue, NULL)), 0) AS Previous_Month
    FROM dbo.Sales
    GROUP BY [Product_ID/No],
             [Product_Name])
SELECT *,
       (Temp.Current_Month - Temp.Previous_Month) AS Variance
FROM Temp;
0 голосов
/ 28 января 2020

Вы можете группировать по продуктам и использовать условное агрегирование:

SELECT 
  [Product_ID/No], [Product_Name], 
  SUM(IIF(DATESERIAL(YEAR(DATE()), MONTH(DATE()), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Current_Month,
  SUM(IIF(DATESERIAL(YEAR(DATEADD("m", -1, DATE())), MONTH(DATEADD("m", -1, DATE())), 1) = DATESERIAL(YEAR([Date]), MONTH([Date]), 1), Revenue, NULL)) AS Previous_Month,
  Nz(Current_Month)- Nz(Previous_Month) AS Variance
FROM Sales
GROUP BY [Product_ID/No], [Product_Name]

Результаты:

Product_ID/No   Product_Name    Current_Month   Previous_Month  Variance
A               APPLE           110             50              60
B               BANANA          100             150             -50
C               CHERRY                          50              -50
...