Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Создание запроса с группировкой по трем не связанным таблицам  [new]
Nogop
Member

Откуда:
Сообщений: 3
Даны 3 таблицы в СУБД MS Access.

Таблица "Отделы": название отдела, номер отдела.

Таблица "Малоценка": номер отдела к которому относится запись, наименование товара, кол-во принятого товара, кол-во списанного товара и цена за ед. товара.

Таблица "Основные": номер отдела к которому относится запись, наименование товара, кол-во принятого товара, кол-во списанного товара и цена за ед. товара.

В таблицах "Основные" и "Малоценка" может быть по несколько записей относящихся к одному отделу.

Между этими таблицами нет никакой связи (по условию связей быть не должно). Необходимо разработать запрос, который будет группировать записи из таблиц "Малоценка" и "Основные" по номеру отдела из таблицы "Отделы". При группировке происходит суммирование стоимости списанных и принятых товаров из таблиц "Основные" и "Малоценка" для каждого отдела.

SQL запрос, который получится у меня:
SELECT Отделы.Отдел, 
Sum([Основные]![Прийнято][Основные]![Цена]) AS ПрийнятоОсн, 
Sum([Основные]![Списано][Основные]![Цена]) AS СписаноОсн, 
Sum([Основные]![Прийнято][Основные]![Цена]) - Sum([Основные]![Списано][Основные]![Цена]) AS НаличиеОсн, 
Sum([Малоценка]![Прийнято][Малоценка]![Цена]) AS ПрийнятоМал, 
Sum([Малоценка]![Списано][Малоценка]![Цена]) AS СписаноМал, 
Sum([Малоценка]![Прийнято][Малоценка]![Цена]) - Sum([Малоценка]![Списано][Малоценка]![Цена]) AS НаличиеМал
FROM Отделы, Основные, Малоценка
GROUP BY Отделы.Отдел;


Этот запрос вместо суммирования данных по каждому отделу суммирует данные по всем отделам и потом выводит одинаковый результат для каждого отдела.

К сообщению приложен файл. Размер - 115Kb
12 ноя 21, 18:47    [22395286]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
Swa111
Member

Откуда:
Сообщений: 241
Nogop,

Вам нужно указать как соединяются таблиц, иначе получаете Cross Join

FROM 
  (Отделы left join Основные on Отделы.Отдел = Основные .Отдел)
  left join Малоценка on Отделы.Отдел = Малоценка .Отдел



если нужно убрать отделы без данных

Where 
  not isnull(Основные .Отдел) or not isNull(Малоценка .Отдел)
13 ноя 21, 00:10    [22395445]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
ACCESS есть СУРБД (система управления реляционными базами данных:англ. relation-отношение, зависимость, связь.)
иначе это просто электронные таблицы (EXCEL). Таблицы в ACCESS должны быть связаны,иначе логика работы БД не понятна(от слова совсем)
13 ноя 21, 02:30    [22395464]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
Nogop
Member

Откуда:
Сообщений: 3
Swa111,

Переделал запрос, теперь считает правильно только те отделы, для которых есть записи только в одной из таблиц. Для 11 отдела в таблице "Основные" есть 6 записей, а в таблице "Малоценка" только 4. При операции join left записи из этих двух таблиц перемножаются. В итоге получается по 24 записи вместо 6 и 4 записей.
13 ноя 21, 12:15    [22395513]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Swa111
Nogop,
...Вам нужно указать как соединяются таблиц, иначе получаете Cross Join...
Все верно: 6х4=24-связей-то нету
13 ноя 21, 21:12    [22395692]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
Swa111
Member

Откуда:
Сообщений: 241
Nogop,

Тогда соберите агрегаты по каждой таблице, а потом соединитесь

FROM 
  (Отделы left join 
    (select Отдел , sum(... from Основные group by Отдел 
    ) as Основные on Отделы.Отдел = Основные .Отдел)
  left join (select Отдел , sum(... from Малоценка group by Отдел 
    ) as Малоценка on Отделы.Отдел = Малоценка .Отдел
14 ноя 21, 06:49    [22395748]     Ответить | Цитировать Сообщить модератору
 Re: Создание запроса с группировкой по трем не связанным таблицам  [new]
Nogop
Member

Откуда:
Сообщений: 3
Swa111,
Большое спасибо, теперь все работает корректно.
14 ноя 21, 10:39    [22395764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить