MS Access Создать запрос с х количество полей в зависимости от ключа другой таблицы - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь создать запрос для подведения итогов еженедельных продаж. У меня есть две команды отдела продаж (может быть больше по времени) и продавец, назначенный на каждую команду. Мне нужно рассчитать% продаж по группе и по отдельности внутри команды.

Я бы хотел, чтобы вместо сгенерированного VBA был сформирован постоянный запрос. Я знаю, что могу создать временную таблицу, используя сгенерированные VB операторы CREATE и INSERT, но таблица не будет обновляться при добавлении информации в таблицу продаж.

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

Результирующий запрос должен вывести что-то вроде следующего примера, учитывая, что недельный диапазон может быть фильтруется в предложении WHERE с 1-й по 1-ю неделю и имеет строки ALL ID_SALES (от 1 до X) из таблицы SALESTEAM, каждая из которых является собственным столбцом.

    This are the tables to extract the data from

    TABLE Sales
          ID as AutoNumber
          ID_CUSTOMER AS Number
          ID_SALES as Number
          SaleDate as Date/Time
          SalesAmt as Currency
    END TABLE

    TABLE SALESTEAM
          ID_SALES as AutoNumber
          Name as String
          StartDate as Date/Time
          EndDate as Date/Time
          Active as Yes/No
          AssignedTo as Number
    END TABLE

    This would be a sample construct of the SELECT if made statically for the current records in SalesTeam Table using the All ID_Sales from all records

SELECT DatePart("yyyy", SalesDate) as SalesYear, DatePart("ww", SalesDate) as SalesWeek, 
           (SUM(SalesAmt) FROM SALES WHERE ID_Sales = 1 AND SalesDate BETWEEN @StartDate AND @EndDate) as Sales1,
           (SUM(SalesAmt) FROM SALES WHERE ID_Sales = 2 AND SalesDate BETWEEN @StartDate AND @EndDate) as Sales2,
           (SUM(SalesAmt) FROM SALES WHERE ID_Sales = 3 AND SalesDate BETWEEN @StartDate AND @EndDate) as Sales3,
           ...
           (SUM(SalesAmt) FROM SALES WHERE ID_Sales = X AND SalesDate BETWEEN @StartDate AND @EndDate) as SalesX
    FROM Sales GROUP BY SalesYear, SalesWeek ORDER BY SalesYear, SalesWeek

    +------+----------------------------------------------------------------------+
    | WEEK |                              ID_SALES                                |
    +------+----------------------------------------------------------------------+
    | WEEK |         1        |         2        |     ...     |         X        |
    +------+------------------+------------------+-------------+------------------+
    +  W1  |  SUM(SALESAMT)   |  SUM(SALESAMT)   |     ...     |  SUM(SALESAMT)   |
    +      | WK1 ID_SALES = 1 | WK1 ID_SALES = 2 |     ...     | WK1 ID_SALES = X |
    +------+------------------+------------------+-------------+------------------+
    |      |                  |                  |             |                  |
    +------+------------------+------------------+-------------+------------------+
    +  WY  |  SUM(SALESAMT)   |  SUM(SALESAMT)   |     ...     |  SUM(SALESAMT)   |
    +      | WKY ID_SALES = 1 | WKY ID_SALES = 2 |     ...     | WKY ID_SALES = X |
    +------+------------------+------------------+-------------+------------------+

1 Ответ

0 голосов
/ 16 марта 2020

ваш желаемый результат структурирован как запрос в стиле кросс-таблицы. Запросы Access Cross-Tab содержат ошибки и их трудно привязать к отчетам, если вы точно не знаете, сколько столбцов (в данном случае продавцов) у вас будет. Я предлагаю сначала вывести стандартный отчет, а затем вернуться и сделать кросс-таблицу. Тем не менее, давайте начнем с более подходящей и нормализованной структуры таблицы, такой как: enter image description here Таблица SalesPersonTeam реализует взаимосвязь «многие ко многим» между SalesPersons и командами. Вы можете свободно добавлять команды, продавцов и перемещать продавцов между командами так, как вам нравится. Ваш первый запрос будет выглядеть следующим образом: enter image description here

, который для моих данных StarTrek дает ($ обозначает латину, отжатую золотом): enter image description here Примечание Вместо этого выбрана CrossTab of Select.

Чтобы получить процент вместо суммы, вам нужно будет обойти ошибку: enter image description here, но обратите внимание, что на вкладке make table выбран, доступ не может проходить крест запрос табуляции с вычисляемым столбцом на основе dlookup, поэтому создайте временную таблицу. затем основать кросс-таблицу на временном столе. для очистки используйте форму для загрузки отчета и создайте временную таблицу. удалить временную таблицу в событии закрытия отчетов. Вот кросс-таблица для получения процентов и результатов: enter image description here enter image description here

, чтобы получить кросс-таблицу результатов, основанных на команде, просто измените запрос, как итак: enter image description here следуйте той же процедуре, что и раньше, чтобы получить кросс-таблицу с процентами. Если вы придерживаетесь отчета на основе кросс-таблицы, вам придется принять решение о том, как обрабатывать переменное число столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...