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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник:
http://support.microsoft.com/ru-ru/office/%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-b84cdfd8-07ba-49a7-b067-e1024ccfcca8

Как вычислить общую сумму в access. Вычисляемые поля в запросах Access

Люди! Помогите сделать простейший запрос.Имеется таблица: Таблица1 формата:Наименование заказа | Сумма | Общая сумма всех заказовпервый 10р. второй 20р.третий 30р.Скажите как мне сложить строки в столбце Сумма? Чтобы вывести результат «Общая сумма всех заказов» = 60р.И таблица со временем будет дописываться. т.е. появится и 100й заказ. соответственно у 100го заказа своя сумма. Надо чтоб «Общая сумма всех заказов» пересчитывалась автоматически.Заранее спасибо за помощь.

По указанным данным это невозможно.Чем определяется сортировка строк в таблице? Вот в Excel это ведь просто делается. К примеру команда =СУММ(A1:A100) — т.е. получим суммы по 100 ячейкам таблице.Почему же в БД такого не сделать?Каждому наименованию заказа(текст) соответствует соответствующийц номер(число). Собственно эти числа(номера заказов) идут по порядку. Т.е. пример:1 | сумка | 100р. |2 | покрышка | 50р. |. 100 | книга | 60р. |. Как мне посчитать общую сумму всех заказов(1. 100. )?

mivang , В Excel существует физический порядок записей в таблице. Который определяет, что выше и что ниже. В реляционных БД такого порядка НЕ СУЩЕСТВУЕТ. Порядок определяется заданной в запросе сортировкой, и при ее отсутствии может быль ЛЮБЫМ. Хотите чтобы вопрос имел смысл — четко укажите критерий, на основе которого можно устновить порядок следования записей. В проведенном примере это, например, номер строки. Однако в структуре показанной таблицы такого поля нет.

Хотите чтобы вопрос имел смысл — четко укажите критерий, на основе которого можно устновить порядок следования записей. В проведенном примере это, например, номер строки. Однако в структуре показанной таблицы такого поля нет. В таблице имеется поле №заказа. Т.е. общий вид примерно такой:№заказа | Наименование заказа | Сумма заказа |1 | сумка | 10rur |2 | krushka | 20rur |3 | banka | 30rur |. | . |***|Теперь есть привязка? Или я опять чего то не понял. :(Как найти общую сумму всех заказов? Теперь есть привязка? Да. SELECT Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа], Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]FROM (SELECT t1.[№ заказа], t1.[Наименование заказа], t1.[Сумма заказа], t2.[№ заказа] FROM Таблица1 AS t1, Таблица1 AS t2 WHERE (((t1.[№ заказа])>=.[№ заказа]))) AS q1 INNER JOIN Таблица1 ON q1.t1.[№ заказа] = Таблица1.[№ заказа]GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа]; SELECT Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа], Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]FROM [ SELECT t1.[№ заказа], t1.[Наименование заказа], t1.[Сумма заказа], t2.[№ заказа] FROM Таблица1 AS t1, Таблица1 AS t2 WHERE (((t1.[№ заказа])>=.[№ заказа]))]. AS q1 INNER JOIN Таблица1 ON q1.t1.[№ заказа] = Таблица1.[№ заказа]GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа]; Выводится ошибка: Недопустимое использование скобок с именем «SELECT t1.[№ заказа». :((В чём проблема?Добавлено через 3 минуты и 33 секунды Народ! Готов выслать БДку. Если сделаете. С меня оплата в WM. ОЧЕНЬ СРОЧНО(в течении 1 часа)

Предположим у нас имеется следующая таблица:таблица: tblOrders поле тип idOrders СчетчикfldName ТекстовыйfldSumma ДенежныйТогда запрос будет примерно таким: SELECT Sum(tblOrders.fldSumma) AS FROM tblOrders; Sum-fldSumma это псевдоним выражения Sum(tblOrders.fldSumma) . В итоге мы получаем таблицу с одной ячейкой. Вот для разъяснения написал пример кода на VS 2005, без обработки исключений, чтобы было понятнее.Для начала нужно создать проект, и добавить туда кнопку GetSumButton и текстовое поле SumTextBox , то есть поменять их имена. Имя формы заменить на MainForm и заменить её код нижестоящим. Option Strict OnOption Explicit OnImports System.Data.OleDbPublic Class MainForm «»» Получить сумму Private Function GetSumma() As Decimal Using cn As New OleDbConnection(My.Settings.dbConnectionString) cn.Open() Dim cmd As OleDbCommand = cn.CreateCommand() cmd.CommandText = «SELECT Sum(tblOrders.fldSumma) AS FROM tblOrders;» Return CDec(cmd.ExecuteScalar()) End Using End Function «»» Обработка события Click кнопки GetSumButton Private Sub GetSumButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetSumButton.Click » Выводим сумму в текущей валюте Me.SumTextBox.Text = FormatCurrency(GetSumma()) End SubEnd Class Чтобы пример заработал нужно в My Project >> Settings добавить строку с именем dbConnectionString следующего содержания Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|orders.mdb . Прикрепить к проекту базу данных MS Access или просто скопировать её в директорию с исполняемым файлом, внутри которой должна быть создана нужная таблица (желательно с данными).

Читайте также  Сортировка записей по тексту, числовому значению или значениям дат

Вопрос: Сумма столбцов в Access ?

В общем заданием является:
Подсчитать прибыль склада по каждому виду товара за последний год.
Виды товара определяются по коду из таблицы «Название». (То бишь вид = название)
Прибылью является поле «Сумма заказа» из таблицы «Заказ»

В итоге нужно вывести
Название -> Общая сумма

Ответ: Проблема решена.
Спасибо)

Вопрос: Mysql: Index по сумме столбцов

Всем привет.
Недавно начал изучать индексы в mysql. Столкнулся со следующем вопросом, ответ на который найти не смог.
Есть запрос на выборку, в котором учавствует условие по сумме столбцов, скажем:
Как правильно создать индекс для данного условия (col1+col2) ?
Я предположил, что можно сделать это так:

Источник:
http://yula-igrushki.ru/internet/kak-vychislit-obshchuyu-summu-v-access-vychislyaemye-polya-v-zaprosah-access/

Пример вычисления общей суммы в таблице базы данных Microsoft Access с использованием SQL -запроса. Компонент TDBText

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

В данной задаче, на примере таблицы Microsoft Access , вычисляется общая сумма с использованием SQL -запроса. Результат вычисления суммы заносится в компонент типа TDBText .

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

Условие задачи

Дана таблица, сформированная средствами СУБД Microsoft Access . Таблица содержит данные с начисленной заработной платой работников предприятия.

Таблица имеет следующую структуру.

Приложение должно вычислять суммарную заработную плату всех работников предприятия. Результат суммы должен выводиться в компоненте типа TDBText сразу после загрузки приложения.

Решение

  1. Построение формы.

Из панели инструментов Tool Palette нужно разместить на форме следующие компоненты (рис. 1):

– из вкладки “dbGo” компонент TADOConnection. Создается объект с именем ADOConnection1. Этот компонент нужен для связи других компонент с файлом базы данных;

– из вкладки “ Data Access ” компонент TDataSource. Создается объект с именем DataSource1. Этот компонент связывает таблицу базы данных ADOTable1 с компонентом визуализации данных DBGrid1;

– из вкладки « Data Access ” компонент типа TDataSource. Создается объект с именем DataSource2. Этот компонент нужен для связи компонента ADOQuery1 с компонентом DBText1;

– из вкладки “dbGo” компонент типа TADOTable. Создается объект с именем ADOTable1. Этот компонент соответствует таблице Workers базы данных;

– из вкладки «dbGo» компонент типа TADOQuery. Этот компонент нужен для формирования SQL-запроса и отображения результата этого запроса в компоненте TDBText;

– из вкладки “ Data Controls ” компонент типа TDataGrid. Создается объект с именем DBGrid1. Этот компонент отображает таблицу Workers базы данных;

– из вкладки « Data Controls ” компонент типа TDBText. Создается объект с именем DBText1. Этот компонент отображает результат SQL-запроса, который формируется в компоненте ADOQuery1.

Результирующая сумма будет выводиться в компоненте DBText1.

Схема связей между компонентами изображена на рисунке 2.

Рис. 1. Компоненты формы

Рис. 2. Схема связей между компонентами программы

  1. Подключение базы данных. Свойство ConnectionString компонента ADOConnection1.

Процесс подключения приложения к базе данных Microsoft Access подробно описан здесь.

Приложение к базе данных подключается с помощью свойства ConnectionString компонента ADOConnection1 (рис. 3). В свойстве ConnectionString указывается тип поставщика данных и полный путь к файлу базы данных.

Рис. 3. Строка ConnectionString компонента ADOConnection1

  1. Настройка компонент формы.

Следующим шагом нужно осуществить настройку компонент между собой. Для этого нужно установить:

– в компоненте ADOConnection1 свойство LoginPrompt = “false” (запрет постоянного ввода имени пользователя и пароля при подключении к базе данных);

– в компоненте ADOTable1 свойство Connection = «ADOConnection1”;

– в компоненте ADOQuery1 свойство Connection = “ADOConnection1”;

– в компоненте DataSource1 свойство DataSet = “ADOTable1”;

– в компоненте DataSource2 свойство DataSet = «ADOQuery1”;

– в компоненте DBGrid1 свойство DataSource = “DataSource1”;

– в компоненте DBText1 свойство DataSource = “DataSource2”;

– в компоненте ADOTable1 свойство TableName = “Worker”;

– в компоненте DBGrid1 из свойства Options установить опцию dgEditing = false (запрет внесения данных в ячейки таблицы непосредственно из сетки DBGrid1).

  1. Свойство Active компонентаADOTable1.

Для отображения данных в DBGrid1 нужно выполнить следующие действия над компонентом ADOTable1 (рис. 4):

– выделить компонент ADOTable1;

– установить свойство Active в значение true.

После этого данные таблицы будут отображены в DBGrid1.

Рис. 4. Свойство Active компонента ADOTable1

  1. Настройка размеров компонент и формы.

На этом этапе осуществляется корректировка размеров и позиций компонент на форме согласно образцу, показанному на рисунке 5.

Рис. 5. Основная форма приложения

  1. Скрытие поля ID_Worker в DBGrid1.

Поле ID_Worker целесообразно скрыть, поскольку оно есть ключевым полем. Для этого из контекстного меню нужно вызвать редактор полей « Fields Editor ” компонента ADOTable1. Вызов редактора изображен на рисунке 6.

Рис. 6. Вызов редактора « Fields Editor ”

Откроется окно Form1.ADOTable1 . В этом окне, с помощью мышки, нужно вызвать контекстное меню. В контекстном меню выбрать команду « Add All fields ».

В результате окно редактора примет вид, как показано на рисунке 7.

Рис. 7. Редактор полей Form1.ADOTable1

В редакторе полей отображаются все поля таблицы Worker. Чтобы удалить поле ID_Worker нужно на строке ID_Worker сделать клик правой кнопкой «мыши» и в контекстном меню выбрать команду Delete. После этого можно закрыть редактора Form1.ADOTable1.

В результате, в таблице DBGrid1 будет отображено только два поля (рис. 8).

Рис. 8. Отображение таблицы Worker с двумя полями

  1. Установка в поле Salary фильтра для отображения с двумя знаками после запятой.

Для того, чтобы в поле Salary корректно отображалось значение суммы (2 знака после запятой), нужно выполнить следующее.

Выделить компонент ADOTable1. Вызвать редактора полей “Fields Editor… ” так как описано в пункте 6. В результате откроется список состоящий из двух полей Name и Salary. Выделить строку с названием Salary. В Object Inspector будет активирован объект с именем ADOTable1Salary.

Следующим шагом в Object Inspector в поле “ Display Format ” нужно установить значение « 0.00 » (рис. 9).

Рис. 9. Установка формата вывода в поле Salary объекта ADOTable1

После выполненных действий, значения в поле Salary таблицы будут выводиться с точностью 2 знака после запятой.

  1. Настройка компонента Label1.

В компоненте Label1 в свойстве Caption нужно ввести строку « Сумма = ».

  1. Свойство SQL компонента ADOQuery1.

Компонент DBGrid1 предназначен для вывода суммы на основе SQL -запроса. Сам SQL -запрос формируется в компоненте ADOQuery1 в свойстве « SQL… ” (рис. 10).

Рис. 10. Свойство SQL компонента ADOQuery1

После выбора этого свойства, вызовется редактор “ String List Editor ”, в котором нужно ввести текст SQL -запроса (рис. 11).

Для вычисления суммы нужно ввести следующий текст запроса:

После этого набранный текст запроса нужно подтвердить выбором команды (кнопки) «OK”.

Рис. 11. Текст SQL -запроса

В SQL -запросе будет вызвана функция агрегирования SUM, которая входит в синтаксис языка SQL. Функция SUM вычисляет сумму записей заданного столбца (столбца «Salary»). Также в SQL -запросе формируется новое поле с именем « Сумма ” в котором отображается результат суммы.

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

Язык SQL имеет и другие стандартные функции агрегирования, которые можно использовать в программах:

– COUNT – выполняет подсчет записей в таблице или подсчет ненулевых значений в столбце таблицы;

– MIN – возвращает минимальное значение в столбце;

– MAX – возвращает максимальное значение в столбце;

– AVG – вычисляет среднее значение для значений, которые помещаются в столбце.

  1. Свойство Active компонента ADOQuery1.

Как было сказано ранее, результат SQL -запроса отображается в компоненте DBText1. SQL -запрос формируется в компоненте ADOQuery1. Для того, чтобы SQL -запрос был доступен для отображения нужно в компоненте ADOQuery1 свойство Active установить в значение “true” (рис. 12).

Рис. 12. Свойство Active компонента ADOQuery1

  1. Свойство DataField компонента DBText1.

Компонент DBText1 предназначен для отображения только одного значения. Этим значением может быть результат функции агрегирования или значение текущей записи некоторого поля. Поэтому, в этом компоненте предусмотрено свойство DataField (“Поле данных»). В этом свойстве указывается поле, которое должно выводиться в DBText1.

В нашем случае поле имеет название « Сумма ». Это название было введено в тексте SQL -запроса.

Рис. 13. Свойство DataField компонента DBText1

После установления поля DataField результат суммы отобразится в компоненте DBText1 (рис. 14).

Рис. 14. Отображение суммы в компоненте DBText1

  1. Установка вывода результата с точностью 2 знака после запятой в компоненте DBText1.

Поскольку компонент DBText1 получает данные от компонента ADOQuery1, то нужно настроить компонент ADOQuery1.

Последовательность шагов следующая.

Вызвать редактор полей “ Form1.ADOQuery1 ” компонента ADOQuery1 из контекстного меню (см. п. 7).

В редакторе полей вызвать контекстное меню и в этом меню выбрать команду « Add all fields ” (рис. 15).

Рис. 15. Команда « Add all fields ” из редактора полей Form1.ADOQuery1

В результате будет добавлено одно поле « Сумма », которое формируется в тексте SQL -запроса. Автоматически создается объект с именем ADOQuery1Сумма .

После выделения поля « Сумма », в Object Inspector нужно установить свойство DisplayFormat в значение « 0.00 » (рис. 16).

Рис. 16. Установка вывода результата с точностью 2 знака после запятой в DBText1

  1. Запуск приложения на выполнение.

Теперь можно запустить приложение на выполнение.

Источник:
http://www.bestprog.net/ru/2016/05/21/013-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D0%B1%D1%89%D0%B5%D0%B9-%D1%81%D1%83%D0%BC%D0%BC%D1%8B-%D0%B2-%D1%82%D0%B0%D0%B1%D0%BB/

Как в access посчитать сумму столбца

Advanced: требуется написание экспертов, взаимодействие и многоязыковые навыки.

Эта статья относится к файлу базы данных Microsoft Access (. mdb) или к файлу базы данных Microsoft Access (ACCDB).

В этой статье описываются два метода, которые можно использовать для создания запроса итогов с накоплением. Итоговый запрос итогов — это запрос, в котором итоговое значение каждой записи является суммированием этой записи и всех предыдущих записей. Этот тип запроса полезен для отображения совокупных итогов для группы записей (или за период времени) на графике или отчете.

Читайте также  Как сделать подстановку в access 2010?

Note (Примечание ) Вы видите демонстрацию методики, используемой в этой статье, в примере файла QrySmp00. exe.

Дополнительные сведения

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

Следующий пример запроса использует таблицу Orders из учебной базы данных Northwind для создания суммы стоимости доставки за каждый месяц 1997. В целях повышения производительности примеры данных ограничены одним годом. Так как функция DSum выполняется один раз для каждой записи в запросе, для завершения обработки запроса может потребоваться несколько секунд (в зависимости от скорости компьютера). Чтобы создать и запустить этот запрос, выполните указанные ниже действия.

Откройте учебную базу данных Northwind.

Создайте новый запрос на выборку и добавьте таблицу Orders .

В меню вид выберите пункт итоги.

Note (Примечание ) В Access 2007 щелкните итоги в группе Показать/скрыть на вкладке конструктор .

В первом столбце бланка запроса введите следующее выражение в поле поле и выберите следующие значения для полей «Итого», «Сортировать» и «Показать»:

В выражении в поле поле отображается и сортируется часть года поля OrderDate.

Во втором столбце бланка запроса введите в поле поле следующее выражение и выберите следующие параметры для полей «Итого», «Сортировать» и «Показать»:

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

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

Note (Примечание ) В следующем примере знак подчеркивания (_) в конце строки используется в качестве символа продолжения строки. При повторном создании этого примера удалите знак подчеркивания в конце строки.

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

В четвертом столбце бланка запроса введите следующее выражение в поле поле и выберите следующие значения для полей «Итого», «Сортировать» и «Показать»:

Выражение в поле поля отображает каждый месяц в текстовом формате, например Январь, фев, Мар и т. д.

В столбце пятый в бланке запроса введите следующее выражение в поле поле и выберите следующие значения для полей «Итого», «условия» и «Показать»:

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

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

Второй метод использует итоговый запрос с функцией DSum () для создания итоговой суммы по группе.

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

Откройте учебную базу данных Northwind. mdb.

Создайте новый запрос на выборку и добавьте таблицу Orders.

В Виевмену щелкните итоги.

Note (Примечание ) В Access 2007 щелкните итоги в группе Показать/скрыть на вкладке конструктор .

В первом столбце бланка запроса добавьте следующее поле в поле поле и выберите следующие параметры для полей «Итого» и «Показать»:

В этом поле данные группируются по КодСотрудника.

Во втором столбце бланка запроса добавьте следующее поле в поле поле и выберите следующие параметры для полей «Итого» и «Показать»:

Это поле суммирует данные доставки.

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

Note (Примечание ) В следующем примере знак подчеркивания (_) в конце строки используется в качестве символа продолжения строки. При повторном создании этого примера удалите знак подчеркивания в конце строки.

Выражение в поле поле использует функцию DSum () для суммирования поля фрахта, когда EmployeeID меньше текущего Емпалиас, а затем форматирует поле в долларах.

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

RPI.su — самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected] . Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.

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

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

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

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

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

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

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

Щелкните в каждой ячейке строки Итого, где должен отображаться тот или иной итог, и выберите его тип.

Выбор типа итога

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

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

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

Потом щелкните стрелку в столбце Цена покупки и выберите пункт Сумма, чтобы увидеть общую цену покупки всех товаров.

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

Примечание: Строку Итог нельзя удалить или вырезать, но можно скрыть, выбрав пункт Итоги на вкладке Главная.

Как работает «Сумма» и другие агрегатные функции

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

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

В таблице ниже описаны агрегатные функции Access, которые доступны в строке «Итог». Помните, что в Access есть и другие агрегатные функции, но они используются в запросах.

Поддерживаемые типы данных

Доступна в строке «Итог»?

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

«Числовой», «Действительное», «Денежный», «Дата и время»

Подсчитывает число элементов в столбце.

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

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

«Числовой», «Действительное», «Денежный», «Дата и время»

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

«Числовой», «Действительное», «Денежный», «Дата и время»

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

«Числовой», «Действительное», «Денежный»

Суммирует элементы в столбце. Подходит только для числовых и денежных данных.

«Число», «Действительное», «Денежный»

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

«Числовой», «Действительное», «Денежный»

Дополнительные сведения о функциях «Стандартное отклонение» и «Дисперсия»

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

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

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

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

Эти функции игнорируют пустые значения.

Для функции Дисперсия используется формула:

Для функции Стандартное отклонение используется формула:

Читайте также  Многотабличные формы - О жизни, работе, людях

Источник:
http://handy-site.ru/kak-v-access-poschitat-summu-stolbca/

Как вычислить общую сумму в access. Вычисляемые поля в запросах Access

Люди! Помогите сделать простейший запрос.Имеется таблица: Таблица1 формата:Наименование заказа | Сумма | Общая сумма всех заказовпервый 10р. второй 20р.третий 30р.Скажите как мне сложить строки в столбце Сумма? Чтобы вывести результат «Общая сумма всех заказов» = 60р.И таблица со временем будет дописываться. т.е. появится и 100й заказ. соответственно у 100го заказа своя сумма. Надо чтоб «Общая сумма всех заказов» пересчитывалась автоматически.Заранее спасибо за помощь.

По указанным данным это невозможно.Чем определяется сортировка строк в таблице? Вот в Excel это ведь просто делается. К примеру команда =СУММ(A1:A100) — т.е. получим суммы по 100 ячейкам таблице.Почему же в БД такого не сделать?Каждому наименованию заказа(текст) соответствует соответствующийц номер(число). Собственно эти числа(номера заказов) идут по порядку. Т.е. пример:1 | сумка | 100р. |2 | покрышка | 50р. |. 100 | книга | 60р. |. Как мне посчитать общую сумму всех заказов(1. 100. )?

mivang , В Excel существует физический порядок записей в таблице. Который определяет, что выше и что ниже. В реляционных БД такого порядка НЕ СУЩЕСТВУЕТ. Порядок определяется заданной в запросе сортировкой, и при ее отсутствии может быль ЛЮБЫМ. Хотите чтобы вопрос имел смысл — четко укажите критерий, на основе которого можно устновить порядок следования записей. В проведенном примере это, например, номер строки. Однако в структуре показанной таблицы такого поля нет.

Хотите чтобы вопрос имел смысл — четко укажите критерий, на основе которого можно устновить порядок следования записей. В проведенном примере это, например, номер строки. Однако в структуре показанной таблицы такого поля нет. В таблице имеется поле №заказа. Т.е. общий вид примерно такой:№заказа | Наименование заказа | Сумма заказа |1 | сумка | 10rur |2 | krushka | 20rur |3 | banka | 30rur |. | . |***|Теперь есть привязка? Или я опять чего то не понял. :(Как найти общую сумму всех заказов? Теперь есть привязка? Да. SELECT Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа], Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]FROM (SELECT t1.[№ заказа], t1.[Наименование заказа], t1.[Сумма заказа], t2.[№ заказа] FROM Таблица1 AS t1, Таблица1 AS t2 WHERE (((t1.[№ заказа])>=.[№ заказа]))) AS q1 INNER JOIN Таблица1 ON q1.t1.[№ заказа] = Таблица1.[№ заказа]GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа]; SELECT Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа], Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]FROM [ SELECT t1.[№ заказа], t1.[Наименование заказа], t1.[Сумма заказа], t2.[№ заказа] FROM Таблица1 AS t1, Таблица1 AS t2 WHERE (((t1.[№ заказа])>=.[№ заказа]))]. AS q1 INNER JOIN Таблица1 ON q1.t1.[№ заказа] = Таблица1.[№ заказа]GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа]; Выводится ошибка: Недопустимое использование скобок с именем «SELECT t1.[№ заказа». :((В чём проблема?Добавлено через 3 минуты и 33 секунды Народ! Готов выслать БДку. Если сделаете. С меня оплата в WM. ОЧЕНЬ СРОЧНО(в течении 1 часа)

Предположим у нас имеется следующая таблица:таблица: tblOrders поле тип idOrders СчетчикfldName ТекстовыйfldSumma ДенежныйТогда запрос будет примерно таким: SELECT Sum(tblOrders.fldSumma) AS FROM tblOrders; Sum-fldSumma это псевдоним выражения Sum(tblOrders.fldSumma) . В итоге мы получаем таблицу с одной ячейкой. Вот для разъяснения написал пример кода на VS 2005, без обработки исключений, чтобы было понятнее.Для начала нужно создать проект, и добавить туда кнопку GetSumButton и текстовое поле SumTextBox , то есть поменять их имена. Имя формы заменить на MainForm и заменить её код нижестоящим. Option Strict OnOption Explicit OnImports System.Data.OleDbPublic Class MainForm «»» Получить сумму Private Function GetSumma() As Decimal Using cn As New OleDbConnection(My.Settings.dbConnectionString) cn.Open() Dim cmd As OleDbCommand = cn.CreateCommand() cmd.CommandText = «SELECT Sum(tblOrders.fldSumma) AS FROM tblOrders;» Return CDec(cmd.ExecuteScalar()) End Using End Function «»» Обработка события Click кнопки GetSumButton Private Sub GetSumButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetSumButton.Click » Выводим сумму в текущей валюте Me.SumTextBox.Text = FormatCurrency(GetSumma()) End SubEnd Class Чтобы пример заработал нужно в My Project >> Settings добавить строку с именем dbConnectionString следующего содержания Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|orders.mdb . Прикрепить к проекту базу данных MS Access или просто скопировать её в директорию с исполняемым файлом, внутри которой должна быть создана нужная таблица (желательно с данными).

Вопрос: Сумма столбцов в Access ?

В общем заданием является:
Подсчитать прибыль склада по каждому виду товара за последний год.
Виды товара определяются по коду из таблицы «Название». (То бишь вид = название)
Прибылью является поле «Сумма заказа» из таблицы «Заказ»

В итоге нужно вывести
Название -> Общая сумма

Ответ: Проблема решена.
Спасибо)

Вопрос: Mysql: Index по сумме столбцов

Всем привет.
Недавно начал изучать индексы в mysql. Столкнулся со следующем вопросом, ответ на который найти не смог.
Есть запрос на выборку, в котором учавствует условие по сумме столбцов, скажем:
Как правильно создать индекс для данного условия (col1+col2) ?
Я предположил, что можно сделать это так:

Источник:
http://yula-igrushki.ru/internet/kak-vychislit-obshchuyu-summu-v-access-vychislyaemye-polya-v-zaprosah-access/

Как сделать сумму в запросе 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

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, там, видимо по другому

Источник:
http://www.rsdn.org/forum/db/3014829.hot