Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сумма строк MS Access 
:(
    Опции темы
mivang
Дата 23.11.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



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

Скажите как мне сложить строки в столбце Сумма? Чтобы вывести результат "Общая сумма всех заказов" = 60р.

И таблица со временем будет дописываться... т.е. появится и 100й заказ... соответственно у 100го заказа своя сумма. Надо чтоб "Общая сумма всех заказов" пересчитывалась автоматически.

Заранее спасибо за помощь. smile 

Это сообщение отредактировал(а) mivang - 23.11.2007, 17:40
PM MAIL   Вверх
Akina
Дата 23.11.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



По указанным данным это невозможно.

Чем определяется сортировка строк в таблице? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mivang
  Дата 23.11.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 23.11.2007,  17:51)
По указанным данным это невозможно.

Чем определяется сортировка строк в таблице?


Вот в Excel это ведь просто делается. К примеру команда =СУММ(A1:A100) - т.е. получим суммы по 100 ячейкам таблице.
Почему же в БД такого не сделать?

Каждому наименованию заказа(текст) соответствует соответствующийц номер(число). Собственно эти числа(номера заказов) идут по порядку. Т.е. пример:

1 | сумка | 100р. |
2 | покрышка | 50р. |
...
100 | книга | 60р. |
...

Как мне посчитать общую сумму всех заказов(1...100...)?

Это сообщение отредактировал(а) mivang - 23.11.2007, 18:19
PM MAIL   Вверх
Akina
Дата 23.11.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



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

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mivang
Дата 23.11.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата

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


В таблице имеется поле №заказа. Т.е. общий вид примерно такой:

№заказа | Наименование заказа | Сумма заказа |
1              | сумка                           | 10rur |
2              | krushka                        | 20rur |
3              | banka                           | 30rur |
...             | ...                                  |***|

Теперь есть привязка? Или я опять чего то не понял... :( Как найти общую сумму всех заказов?
PM MAIL   Вверх
Akina
Дата 23.11.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(mivang @  23.11.2007,  19:39 Найти цитируемый пост)
Теперь есть привязка? 

Да.

Код

SELECT Таблица1.[№ заказа],
       Таблица1.[Наименование заказа],
       Таблица1.[Сумма заказа],
       Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]
FROM 
(
   SELECT t1.[№ заказа],
          t1.[Наименование заказа],
          t1.[Сумма заказа],
          t2.[№ заказа]
   FROM Таблица1 AS t1,
        Таблица1 AS t2
   WHERE (((t1.[№ заказа])>=[t2].[№ заказа]))
) AS q1 
INNER JOIN Таблица1 
ON q1.t1.[№ заказа] = Таблица1.[№ заказа]
GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа];


Это сообщение отредактировал(а) Akina - 23.11.2007, 19:28


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mivang
Дата 23.11.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата

SELECT Таблица1.[№ заказа],
       Таблица1.[Наименование заказа],
       Таблица1.[Сумма заказа],
       Sum(q1.[Сумма заказа]) AS [Общая сумма всех заказов]
FROM 
[
   SELECT t1.[№ заказа],
          t1.[Наименование заказа],
          t1.[Сумма заказа],
          t2.[№ заказа]
   FROM Таблица1 AS t1,
        Таблица1 AS t2
   WHERE (((t1.[№ заказа])>=[t2].[№ заказа]))
]. AS q1 
INNER JOIN Таблица1 
ON q1.t1.[№ заказа] = Таблица1.[№ заказа]
GROUP BY Таблица1.[№ заказа], Таблица1.[Наименование заказа], Таблица1.[Сумма заказа];


Выводится ошибка: Недопустимое использование скобок с именем 'SELECT t1.[№ заказа'. :(( В чём проблема?

Добавлено через 3 минуты и 33 секунды
Народ! Готов выслать БДку. Если сделаете. С меня оплата в WM. ОЧЕНЬ СРОЧНО(в течении 1 часа)
PM MAIL   Вверх
Akina
Дата 23.11.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Поправил код. Однако если ты после сохранения запроса откроешь конструктор - увидишь тот же ляп.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
unicuum
Дата 5.12.2007, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



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

таблица: tblOrders
поле         тип
idOrders    Счетчик
fldName     Текстовый
fldSumma   Денежный

Тогда запрос будет примерно таким:

Код

SELECT Sum(tblOrders.fldSumma) AS [Sum-fldSumma]
FROM tblOrders;


Sum-fldSumma это псевдоним выражения Sum(tblOrders.fldSumma). В итоге мы получаем таблицу с одной ячейкой. Вот для разъяснения написал пример кода на VS 2005, без обработки исключений, чтобы было понятнее.

Для начала нужно создать проект, и добавить туда кнопку GetSumButton и текстовое поле SumTextBox, то есть поменять их имена. Имя формы заменить на MainForm и заменить её код нижестоящим.

Код

Option Strict On
Option Explicit On

Imports System.Data.OleDb

Public Class MainForm

    ''' <summary>Получить сумму</summary>
    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 [Sum-fldSumma] FROM tblOrders;"
            Return CDec(cmd.ExecuteScalar())
        End Using
    End Function

    ''' <summary>Обработка события Click кнопки GetSumButton</summary>
    Private Sub GetSumButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetSumButton.Click
        ' Выводим сумму в текущей валюте
        Me.SumTextBox.Text = FormatCurrency(GetSumma())
    End Sub

End Class


Чтобы пример заработал нужно в My Project >> Settings добавить строку с именем dbConnectionString следующего содержания Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\orders.mdb. Прикрепить к проекту базу данных MS Access или просто скопировать её в директорию с исполняемым файлом, внутри которой должна быть создана нужная таблица (желательно с данными).


--------------------
user posted image
обычный день на винграде
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.