Как сделать сумму в запросе access?

Подсчет данных при помощи запроса

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

Выберите нужное действие

Способы подсчета данных

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

Сумма для суммирования столбцов чисел;

Среднее для вычисления среднего значения в столбце чисел;

Максимум для нахождения наибольшего значения в поле;

Минимум для нахождения наименьшего значения в поле;

Стандартное отклонение для оценки разброса значений относительно среднего значения;

Дисперсия для вычисления статистической дисперсии всех значений в столбце.

В Access предусмотрено два способа добавления функции Count и других агрегатных функций в запрос. Вы можете:

Открыть запрос в режиме таблицы и добавить строку итогов. Строка итогов позволяет использовать агрегатные функции в одном или нескольких столбцах в результатах запроса без необходимости изменять его структуру.

Создать итоговый запрос. В итоговом запросе вычисляются промежуточные итоги по группам записей. Например, если вы хотите вычислить промежуточную сумму всех продаж по городам или по кварталам, следует использовать итоговый запрос для группировки записей по нужной категории, а затем просуммировать все объемы продаж. С другой стороны, с помощью строки итогов можно вычислить общий итог для одного или нескольких столбцов (полей) данных.

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

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

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

С другой стороны, многие агрегатные функции работают только с данными в полях, имеющих определенный тип данных. Например, функция Сумма работает только с типами данных «Число», «Действительное» и «Денежный». Дополнительные сведения о типах данных, требуемых для каждой функции, см. ниже в разделе Справочные сведения об агрегатных функциях.

Общие сведения о типах данных см. в статье Изменение типа данных для поля.

Подсчет данных с помощью строки итогов

Чтобы добавить в запрос строку итогов, откройте его в режиме таблицы, добавьте строку, а затем выберите функцию Число или другую агрегатную функцию, например Сумма, Минимум, Максимум или Среднее. В этом разделе объясняется, как создать простой запрос на выборку и добавить строку итогов.

Создание простого запроса на выборку

На вкладке Создать в группе Другое нажмите кнопку Конструктор запросов.

В диалоговом окне Добавление таблицы дважды щелкните таблицу или таблицы, которые вы хотите использовать в запросе, а затем нажмите кнопку Закрыть.

Выбранные таблицы отображаются в виде окон в верхней части конструктора запросов. На рисунке показана типичная таблица в конструкторе запросов.

Дважды щелкните поля таблицы, которые вы хотите использовать в запросе.

Вы можете включить поля, содержащие описательные данные, например имена и описания, но следует обязательно добавить поле, содержащее подсчитываемые значения.

Каждое поле отображается в столбце в бланке запроса.

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

Результаты запроса отображаются в режиме таблицы.

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

При необходимости вы можете сохранить запрос.

Добавление строки итогов

Откройте запрос в режиме таблицы. Если база данных имеет формат ACCDB, щелкните правой кнопкой мыши вкладку документа для запроса и выберите команду Режим таблицы.

Если используется база данных в формате MDB, созданная в более ранней версии Access, на вкладке Главная в группе Режимы щелкните стрелку под кнопкой Режим и выберите значение Режим таблицы.

Дважды щелкните запрос в области навигации. Запрос будет выполнен, а его результаты будут загружены в таблицу.

На вкладке Главная в группе Записи нажмите кнопку Итоги.

Под последней строкой данных в таблице появится новая строка Итог.

В строке Итог щелкните поле, по которому вы хотите выполнить подсчет, и выберите в списке функцию Count.

Скрытие строки итогов

На вкладке Главная в группе Записи нажмите кнопку Итоги.

Дополнительные сведения об использовании строки итогов см. в разделе Отображение итогов по столбцу в таблице.

Подсчет данных с помощью итогового запроса

Когда нужно подсчитать некоторые или все записи, возвращаемые запросом, то вместо строки итогов можно воспользоваться итоговым запросом. Например, вы можете подсчитать общее число сделок или число сделок в отдельном городе.

Как правило, итоговый запрос применяется вместо строки итогов тогда, когда требуется использовать значение результата в другой части базы данных, например в отчете.

Читать еще:  Как сделать дерево в access?

Подсчет всех записей в запросе

На вкладке Создать в группе Другое нажмите кнопку Конструктор запросов.

В диалоговом окне Добавление таблицы дважды щелкните таблицу, которую вы хотите использовать в запросе, а затем нажмите кнопку Закрыть.

Таблица появится в окне в верхней части конструктора запросов.

Дважды щелкните поля, которые вы хотите использовать в запросе, и убедитесь, что вы включите поле, которое хотите подсчитать. Вы можете подсчитать поля из большинства типов данных — исключением является поля, содержащие сложные, повторяющиеся скалярные данные, такие как поле многозначных списков.

На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.

В бланке появится строка Итог, а в строке для каждого поля запроса будет указано Группировка.

В строке Итог щелкните поле, по которому вы хотите выполнить подсчет, и выберите в списке функцию Count.

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

Результаты запроса отображаются в режиме таблицы.

При необходимости вы можете сохранить запрос.

Подсчет записей в группе или категории

На вкладке Создать в группе Другое нажмите кнопку Конструктор запросов.

В диалоговом окне Добавление таблицы дважды щелкните таблицу или таблицы, которые вы хотите использовать в запросе, а затем нажмите кнопку Закрыть.

Таблица (или таблицы) появится в окне в верхней части конструктора запросов.

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

На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.

В бланке появится строка Итог, а в строке для каждого поля запроса будет указано Группировка.

В строке Итог щелкните поле, по которому вы хотите выполнить подсчет, и выберите в списке функцию Count.

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

Результаты запроса отображаются в режиме таблицы.

При необходимости вы можете сохранить запрос.

Справочные сведения об агрегатных функциях

В следующей таблице перечислены и отписаны агрегатные функции Access, которые можно использовать в строке итогов и в запросах. Помните, что в Access предусмотрено больше агрегатных функций для запросов, чем для строки итогов. Кроме того, при работе с проектом Access (внешней базой данных Access, которая подключается к базе данных Microsoft SQL Server) можно использовать расширенный набор агрегатных функций, предоставляемый SQL Server. Дополнительные сведения о них см. в электронной документации Microsoft SQL Server.

Как сделать сумму в запросе access?

Здравствуйте, Аноним, Вы писали:

А>После выполнения запроса
А>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
А>FROM Oplata1 O1, Oplata2 O2, Oplata3 O3, Schet S
А>WHERE O1.s_id=S.s_id AND O2.s_id=S.s_id AND O3.s_id=S.s_id

А>мне выводятся замноженные данные, где коэффициент умножения зависит от кол-во строк в таблицах Oplata
А>а нужно, чтобы вывелись след. данные:
А>SUM(O1.o_summa) SUM(O2.o_summa) SUM(O3.o_summa)
А> 30,00 50,00 10,00
А> 37,00 23,00 14,00

А>Если делать выборку только из любой одной таблицы Oplata, то все нормально

А>Как мне правильно составить запрос по выборке суммы данных?
А>Подскажите плиз, очень нужно. Без этого весь процесс разработки стоит

SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
FROM Oplata1 O1
left join Oplata2 O2 on O2.s_id=S.s_id
left join Oplata3 O3 on O3.s_id=S.s_id

Здравствуйте, vladpol, Вы писали:

V>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
V>FROM Oplata1 O1
V>left join Oplata2 O2 on O2.s_id=S.s_id
V>left join Oplata3 O3 on O3.s_id=S.s_id

Сразу вылетает ошибка, так как LEFT JOIN применяется к таблице Oplata1, а сравнение идет с таблицей Schet

PS. UNION мне использовать нельзя, так как суммы данных по каждому счету должны быть в одной строке

Здравствуйте, Аноним, Вы писали:
А>После выполнения запроса
А>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
А>FROM Oplata1 O1, Oplata2 O2, Oplata3 O3, Schet S
А>WHERE O1.s_id=S.s_id AND O2.s_id=S.s_id AND O3.s_id=S.s_id

А>мне выводятся замноженные данные, где коэффициент умножения зависит от кол-во строк в таблицах Oplata
А>а нужно, чтобы вывелись след. данные:
А>SUM(O1.o_summa) SUM(O2.o_summa) SUM(O3.o_summa)
А> 30,00 50,00 10,00
А> 37,00 23,00 14,00

если поддерживается запрос из запроса, то
select t.s_id, s.agg, s2.agg, s3.agg
from Schet t,
left join (select ss.s_id, sum(ss.summa) agg
from oplata1 ss
group by ss.s_id
) s
on t.s_id = s.s_id
и т.д.

если не поддерживаются внешние соединения, то, например:
select t.s_id, (select sum(ss.summa) from oplata1 ss where ss.s_id = t.s_id) agg, .
from Schet t

По моему я четко написал, потом сгруппируй.
Вот тебе готовый, рабочий вариант на основе твоего примера

Вставляешь в запрос и готово, если у тебя конечно все таблицы и поля именно так зовутся.

Согласен, решение возможно топорное. но на малой таблице и так сойдет. через ЖО, зато работает. Если у кого найдется более простой рабочий вариант, было бы интересно.

Здравствуйте, Аноним, Вы писали:

А>По моему я четко написал, потом сгруппируй.
А>Вот тебе готовый, рабочий вариант на основе твоего примера

А>
ему нужны суммы для каждого счета из Schet по каждой из трех таблиц отдельно — это раз
а во-вторых, подумайте, что будет если для одного s_id будет одинаковая сумма, например, в oplata1 и oplata2

Здравствуйте, Аноним, Вы писали:

А>По моему я четко написал, потом сгруппируй.
А>Вот тебе готовый, рабочий вариант на основе твоего примера

А>Вставляешь в запрос и готово, если у тебя конечно все таблицы и поля именно так зовутся.

А>Согласен, решение возможно топорное. но на малой таблице и так сойдет. через ЖО, зато работает. Если у кого найдется более простой рабочий вариант, было бы интересно.

Такой запрос просто вывел сумму всех таблиц по каждому счету, а мне нужно, чтобы в каждой строке была сумма из каждой таблицы по каждому счету (каждый счет — новая строка, в которой 3 поля с суммами из каждой таблице по данному счету)

Здравствуйте, ZneP, Вы писали:

ZP>Здравствуйте, vladpol, Вы писали:

V>>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
V>>FROM Oplata1 O1
V>>left join Oplata2 O2 on O2.s_id=S.s_id
V>>left join Oplata3 O3 on O3.s_id=S.s_id

Читать еще:  Как сделать фон формы в access?

ZP>Сразу вылетает ошибка, так как LEFT JOIN применяется к таблице Oplata1, а сравнение идет с таблицей Schet

SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
FROM Schet S
left join Oplata1 O1 on O1.s_id=S.s_id
left join Oplata2 O2 on O2.s_id=S.s_id
left join Oplata3 O3 on O3.s_id=S.s_id

P.S. Я не уверен, что это поможет, но попробовать стоит

Почему-то при выполнении запроса

SELECT S.s_id, OS1.o_summa, OS2.o_summa
FROM Schet S
LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id,
Schet S2
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

появляется ошибка «Не поддерживается выражение объединения.»

А если такой:
SELECT S.s_id, OS1.o_summa, OS2.o_summa
FROM Schet S
LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

«Ошибка синтаксиса (пропущен оператор) в выражении запроса «OS1.s_id=S.s_id
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id»

s_id Sum-o_summa Sum-o_summa1 Sum-o_summa2
1 840,00р. 200,00р. 40,00р.
2 37,00р. 23,00р. 14,00р.

Здравствуйте, ZneP, Вы писали:

ZP>Почему-то при выполнении запроса

ZP>SELECT S.s_id, OS1.o_summa, OS2.o_summa
ZP>FROM Schet S
ZP>LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id,
ZP>Schet S2
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
ZP>GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

ZP>появляется ошибка «Не поддерживается выражение объединения.»

ZP>А если такой:
ZP>SELECT S.s_id, OS1.o_summa, OS2.o_summa
ZP>FROM Schet S
ZP>LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
ZP>GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

ZP>»Ошибка синтаксиса (пропущен оператор) в выражении запроса «OS1.s_id=S.s_id
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id»

Тогда сорри я в основном работал с Interbase, там, видимо по другому

Как сделать сумму в запросе access?

Здравствуйте, Аноним, Вы писали:

А>После выполнения запроса
А>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
А>FROM Oplata1 O1, Oplata2 O2, Oplata3 O3, Schet S
А>WHERE O1.s_id=S.s_id AND O2.s_id=S.s_id AND O3.s_id=S.s_id

А>мне выводятся замноженные данные, где коэффициент умножения зависит от кол-во строк в таблицах Oplata
А>а нужно, чтобы вывелись след. данные:
А>SUM(O1.o_summa) SUM(O2.o_summa) SUM(O3.o_summa)
А> 30,00 50,00 10,00
А> 37,00 23,00 14,00

А>Если делать выборку только из любой одной таблицы Oplata, то все нормально

А>Как мне правильно составить запрос по выборке суммы данных?
А>Подскажите плиз, очень нужно. Без этого весь процесс разработки стоит

SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
FROM Oplata1 O1
left join Oplata2 O2 on O2.s_id=S.s_id
left join Oplata3 O3 on O3.s_id=S.s_id

Здравствуйте, vladpol, Вы писали:

V>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
V>FROM Oplata1 O1
V>left join Oplata2 O2 on O2.s_id=S.s_id
V>left join Oplata3 O3 on O3.s_id=S.s_id

Сразу вылетает ошибка, так как LEFT JOIN применяется к таблице Oplata1, а сравнение идет с таблицей Schet

PS. UNION мне использовать нельзя, так как суммы данных по каждому счету должны быть в одной строке

Здравствуйте, Аноним, Вы писали:
А>После выполнения запроса
А>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
А>FROM Oplata1 O1, Oplata2 O2, Oplata3 O3, Schet S
А>WHERE O1.s_id=S.s_id AND O2.s_id=S.s_id AND O3.s_id=S.s_id

А>мне выводятся замноженные данные, где коэффициент умножения зависит от кол-во строк в таблицах Oplata
А>а нужно, чтобы вывелись след. данные:
А>SUM(O1.o_summa) SUM(O2.o_summa) SUM(O3.o_summa)
А> 30,00 50,00 10,00
А> 37,00 23,00 14,00

если поддерживается запрос из запроса, то
select t.s_id, s.agg, s2.agg, s3.agg
from Schet t,
left join (select ss.s_id, sum(ss.summa) agg
from oplata1 ss
group by ss.s_id
) s
on t.s_id = s.s_id
и т.д.

если не поддерживаются внешние соединения, то, например:
select t.s_id, (select sum(ss.summa) from oplata1 ss where ss.s_id = t.s_id) agg, .
from Schet t

По моему я четко написал, потом сгруппируй.
Вот тебе готовый, рабочий вариант на основе твоего примера

Вставляешь в запрос и готово, если у тебя конечно все таблицы и поля именно так зовутся.

Согласен, решение возможно топорное. но на малой таблице и так сойдет. через ЖО, зато работает. Если у кого найдется более простой рабочий вариант, было бы интересно.

Здравствуйте, Аноним, Вы писали:

А>По моему я четко написал, потом сгруппируй.
А>Вот тебе готовый, рабочий вариант на основе твоего примера

А>
ему нужны суммы для каждого счета из Schet по каждой из трех таблиц отдельно — это раз
а во-вторых, подумайте, что будет если для одного s_id будет одинаковая сумма, например, в oplata1 и oplata2

Здравствуйте, Аноним, Вы писали:

А>По моему я четко написал, потом сгруппируй.
А>Вот тебе готовый, рабочий вариант на основе твоего примера

А>Вставляешь в запрос и готово, если у тебя конечно все таблицы и поля именно так зовутся.

А>Согласен, решение возможно топорное. но на малой таблице и так сойдет. через ЖО, зато работает. Если у кого найдется более простой рабочий вариант, было бы интересно.

Такой запрос просто вывел сумму всех таблиц по каждому счету, а мне нужно, чтобы в каждой строке была сумма из каждой таблицы по каждому счету (каждый счет — новая строка, в которой 3 поля с суммами из каждой таблице по данному счету)

Здравствуйте, ZneP, Вы писали:

ZP>Здравствуйте, vladpol, Вы писали:

V>>SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
V>>FROM Oplata1 O1
V>>left join Oplata2 O2 on O2.s_id=S.s_id
V>>left join Oplata3 O3 on O3.s_id=S.s_id

ZP>Сразу вылетает ошибка, так как LEFT JOIN применяется к таблице Oplata1, а сравнение идет с таблицей Schet

Читать еще:  Как сделать диапазон в access?

SELECT SUM(O1.o_summa), SUM(O2.o_summa), SUM(O3.o_summa)
FROM Schet S
left join Oplata1 O1 on O1.s_id=S.s_id
left join Oplata2 O2 on O2.s_id=S.s_id
left join Oplata3 O3 on O3.s_id=S.s_id

P.S. Я не уверен, что это поможет, но попробовать стоит

Почему-то при выполнении запроса

SELECT S.s_id, OS1.o_summa, OS2.o_summa
FROM Schet S
LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id,
Schet S2
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

появляется ошибка «Не поддерживается выражение объединения.»

А если такой:
SELECT S.s_id, OS1.o_summa, OS2.o_summa
FROM Schet S
LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

«Ошибка синтаксиса (пропущен оператор) в выражении запроса «OS1.s_id=S.s_id
LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id»

s_id Sum-o_summa Sum-o_summa1 Sum-o_summa2
1 840,00р. 200,00р. 40,00р.
2 37,00р. 23,00р. 14,00р.

Здравствуйте, ZneP, Вы писали:

ZP>Почему-то при выполнении запроса

ZP>SELECT S.s_id, OS1.o_summa, OS2.o_summa
ZP>FROM Schet S
ZP>LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id,
ZP>Schet S2
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
ZP>GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

ZP>появляется ошибка «Не поддерживается выражение объединения.»

ZP>А если такой:
ZP>SELECT S.s_id, OS1.o_summa, OS2.o_summa
ZP>FROM Schet S
ZP>LEFT JOIN (SELECT O1.s_id, SUM(O1.o_summa) AS o_summa FROM Oplata1 O1 GROUP BY O1.s_id) AS OS1 ON OS1.s_id=S.s_id
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id
ZP>GROUP BY S.s_id, OS1.o_summa, OS2.o_summa

ZP>»Ошибка синтаксиса (пропущен оператор) в выражении запроса «OS1.s_id=S.s_id
ZP>LEFT JOIN (SELECT O2.s_id, SUM(O2.o_summa) AS o_summa FROM Oplata2 O2 GROUP BY O2.s_id) AS OS2 ON OS2.s_id=S2.s_id»

Тогда сорри я в основном работал с Interbase, там, видимо по другому

Итоговый запрос из базы данных Access

Запросы позволяют не только выбирать записи из таблиц Access, но и вычислять различные статистические параметры. Например, можно подсчитать суммарное количество контактов и вывести даты первого и последнего контакта с каждым из людей, включенных в таблицу Контакты. Чтобы построить такой запрос в режиме конструктора, выполните следующие действия.

1. В окне базы данных щелкните на кнопке Запросы.

2. Дважды щелкните на значке Создание запроса в режиме конструктора.

3. В открывшемся окне диалога (рис. 17.6) выделите строку Контакты.

4. Щелчком на кнопке Добавить добавьте выбранную таблицу в верхнюю область конструктора запроса.

5. Выделите пункт Список и снова щелкните на кнопке Добавить.

6. Щелчком на кнопке Закрыть закройте окно диалога Добавление таблицы. Списки полей двух таблиц, соединенные линией связи, появятся в окне конструктора.

7. Щелкните на кнопке Групповые операции панели инструментов. В бланке запроса появится дополнительная строка Групповая операция, позволяющая выполнять статистические операции со значениями конкретных полей.

Рис. 17.6 . Добавление таблицы

8. Перетащите поле Фамилия в ячейку Поле первого столбца конструктора.

9. В ту же ячейку второго столбца перетащите поле Имя таблицы Контакты.

10. В третий, четвертый и пятый столбцы бланка запроса перетащите поле Дата таблицы Список (рис. 17.7).

Рис. 17.7. Запрос с групповыми операциями

11. В раскрывающемся списке ячейки Групповая операция третьего столб ца бланка запроса выберите пункт Min.

12. В той же ячейке четвертого столбца выберите пункт Мах.

13. В пятом столбце задайте групповую операцию Count. Групповые операции построенного запроса обработают все записи таблицы Список, соответствующие конкретному человеку из таблицы Контакты, и вместо самих данных таблицы Список выведут в соответствующее поле результата запроса только значение величины, вычисляемой по определенной формуле. Доступные групповые операции перечислены в табл. 17.1.

ТАБЛИЦА 17.1 . Групповые операции

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

14. Щелкните на кнопке Вид, чтобы выполнить запрос. Появится таблица с пятью столбцами. Два первых столбца содержат фамилии и имена людей. По ним выполняется группировка, то есть расчет значений остальных полей запроса выполняется для записей таблицы Список, сопоставляемых с одним человеком. Как уже говорилось выше, соответствие контакта таблицы Список и человека из таблицы Контакты определяется полями Код_Контакты, с помощью которых осуществляется связь этих двух таблиц. Третий и четвертый столбцы запроса выводят соответственно дату первого (функция Min) и последнего (функция Мах) контакта с данным человеком. Пятый столбец содержит количество записей в таблице Список (функция Count), соответствующих. данному человеку, то есть число контактов с ним. Единственный недостаток построенного запроса — это непонятные имена столбцов. Давайте скорректируем их.

15. Щелчком на кнопке Вид вернитесь в конструктор запроса.

16. В ячейке Поле третьего столбца замените имя Дата на текст Дата первого контакта: Дата. Правая часть этого выражения, расположенная правее двоеточия, по-прежнему задает имя поля, а левая определяет название столбца результата запроса. Таким образом, любому столбцу запроса можно назначить произвольное имя.

17. В ячейке Поле четвертого столбца введите Дата последнего контакта: Дата.

18. В первой строке пятого столбца бланка запроса введите Число контактов: Дата.

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

19. Снова щелкните на кнопке Вид.

20. Закройте запрос.

21. Для сохранения изменений структуры щелкните на кнопке Да.

22. В окне диалога Сохранение введите имя Итоговый запрос и щелкните на кнопке ОК.

Ссылка на основную публикацию
Adblock
detector