Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и базы данных
Войти
Регистрация
Восстановить пароль
 
 
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
#1

Sql запрос на вывод суммы заказа - Delphi БД/Delphi 6-7

04.06.2018, 15:59. Просмотров 374. Ответов 42
Метки нет (Все метки)

Здравствуйте, необходимо создать запрос, что бы выводилась сумма одного заказа, а не всех. В заказе может быть несколько наименований разных видов.
Вот так считаю стоимость всех напитков в заказах. Заранее спасибо
SQL
1
2
3
4
SELECT SUM( Выражение1)
FROM (SELECT Заказ_напитков.Количество, Напитки.Цена, [Заказ_напитков.Количество]*[Цена] AS Выражение1
FROM Напитки INNER JOIN Заказ_напитков ON Напитки.Код_напитка = Заказ_напитков.Напиток
WITH OWNERACCESS OPTION)
а как одного заказа сумму подсчитать там и блюда и напитки. Структуру бд прилагаю и сразу вопрос, в таблице в строке заказа, должна выводится эта сумма
0
Миниатюры
Sql запрос на вывод суммы заказа  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2018, 15:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Delphi 6-7 Sql запрос на вывод суммы заказа (Delphi БД):

SQL запрос Delphi 7 по количеству стоимости заказа
У меня эсть две таблицы DBGrid1 DBgrid2. В DBGrid1 поля - количество товара и...

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

Не работает запрос суммы с параметром SQL
Доброго времени суток! Пишу запрос if (RadioGroup4.ItemIndex=1) then ...

Delphi XE4 SQL запрос на подсчет суммы
Составил запрос на подсчет суммы по критерию (Код_заказа (не ключевое)). И не...

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

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

42
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 15:50 #21
если в таблице нет поля заказ, откуда он данные взял для неправильного запроса???
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 15:52  [ТС] #22
krapotkin,
SQL
1
INNER
добавила в ваш запрос и получила, это, а так была ошибка From
0
Изображения
 
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 15:55 #23
я вообще ничего не понимаю
давайте так тогда
SQL
1
2
3
4
SELECT ZN.*, N.*
FROM Заказ_напитков ZN
INNER JOIN Напитки N ON (ZN.Напиток = N.Код_напитка)
WHERE ZN.заказ=2
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 15:56  [ТС] #24
krapotkin, вот второй и третий запрос.
0
Вложения
Тип файла: rar db1.rar (1.09 Мб, 1 просмотров)
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 15:58  [ТС] #25
krapotkin, интригующая запись
0
Миниатюры
Sql запрос на вывод суммы заказа  
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 16:13 #26
ну вот последняя-то верная
она такая и должна быть

Добавлено через 1 минуту
соответственно должно быть и
SQL
1
2
SELECT SUM(ZN.Количество*N.Цена) FROM
то же окончание запроса
должно давать правильную сумму
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 16:32  [ТС] #27
krapotkin, Cпасибо ну да, но я хотела сумму то есть заказано то есть 50 вода + 40 spite

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

Добавлено через 9 минут
krapotkin,
SQL
1
2
3
SELECT SUM(ZN.Количество*N.Цена)
FROM Заказ_блюд AS ZN INNER JOIN Блюда AS N ON ZN.Название = N.[Код Блюда]
WHERE ZN.заказ=1;
Сумма заказанных блюд так не работает((((((((
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 16:44 #28
тогда показывайте содержание таблиц
у меня нечем открыть Access
должна работать абсолютно так же

Добавлено через 1 минуту
Цитата Сообщение от kerasa Посмотреть сообщение
но я хотела сумму то есть заказано то есть 50 вода + 40 spite
стопэ
у вас в заказе 2 заказано 15 фант и всё
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 16:47  [ТС] #29
krapotkin, нет, там не 15 фант, вот все три таблицы плюс что нужно прописать в id что бы сумма менялась при переходе к следующей записи. я про запрос сумма заказанных напитков
0
Миниатюры
Sql запрос на вывод суммы заказа  
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 16:52 #30
ну а как же??
смотрим заказ напитков, там для заказа 2 написано только напиток 4 кол-во 15
в заказе блюд для заказа 2 есть только 10 штук блюда №2

Добавлено через 31 секунду
так что все верно
укажете другой номер заказа, посчитает для него
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 17:13  [ТС] #31
krapotkin, а автоматически никак, по переходу к следующей записи, в Delphi

Добавлено через 3 минуты
krapotkin,
SQL
1
2
3
SELECT SUM(ZN.Количество*N.Цена)
FROM Заказ_напитков AS ZN INNER JOIN Напитки AS N ON ZN.Напиток = N.Код_напитка
WHERE ZN.заказ=Заказ.[Номер заказа];
Вот так не идет
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 19:58 #32
Цитата Сообщение от kerasa Посмотреть сообщение
Заказ.[Номер заказа];
это простите что обозначает??
где в вашем выражении FROM таблица заказ, к которой вы обращаетесь ??

о какой следующей записи вы говорите?
если вы еще что-то держите в уме, то любо скажите всем, либо вернемся к той теме, что вы обозначили

вам надо выбрать все данные для конкретного заказа
при этом само выражение для любого заказа одинаково
для этого и применяются параметры в запросах
http://www.cyberforum.ru/blogs/469693/blog5254.html
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 20:56  [ТС] #33
krapotkin, переходя от заказа к заказу, должна выводится сумма заказанных блюд, заказанных напитков и сумма заказа. этого изначально я и добиваюсь, без изменения вручную кода заказа и всё это через ADOQuery в Delphi
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 21:41 #34
переходя от заказа к заказу, вы имеете номер заказа из вашего текущего датасета
а рассмотренный нами SQL запрос имеет параметр - номер заказа
удачное совпадение
если задать это значение параметра и переоткрыть наш запрос про суммы то получим значения для этого параметра

если чего.. переход по вашему датасету каждый раз вызывает событие OnAfterScroll

Добавлено через 1 минуту
Цитата Сообщение от kerasa Посмотреть сообщение
переходя от заказа к заказу, должна выводится сумма заказанных блюд
Цитата Сообщение от kerasa Посмотреть сообщение
необходимо создать запрос, что бы выводилась сумма одного заказа, а не всех
найдите 10 отличий
если вы задаете один вопрос, а ответ ищете на другой...
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 21:56  [ТС] #35
krapotkin,
Delphi
1
2
3
4
with datamodule1.ADOQuery5 do
begin
sql.Text:='SELECT SUM(ZN.Количество*N.Цена) FROM Заказ_напитков AS ZN INNER JOIN Напитки AS N ON ZN.Напиток = N.Код напитка SELECT SUM(ZN.Количество*N.цена)WHERE ZN.заказ= +'ADOTablezak.FieldByName(Код_заказа');
open;
Так??
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 22:05 #36
в целом - так
но если внимательно посмотреть

#2 WHERE заказ=:order_id
#5 WHERE заказ=:order_id
WHERE заказ=:order_id
#7 WHERE заказ=:order_id
#10 WHERE N.заказ=:order_id
#13 WHERE Напитки.заказ=:order_id
#32 параметры в запросах
http://www.cyberforum.ru/blogs/469693/blog5254.html
может все-таки прочесть про параметры???
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 22:30  [ТС] #37
krapotkin, order_id - это ваша объявление у меня [Номер заказа]. Вы имеете в видду использовать например 'param' и ему присваивать поле.

Добавлено через 17 минут
krapotkin, помогите пожалуйста, я умру, если еще один день с этим просижу
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
05.06.2018, 22:42 #38
Всегда SQL запрос содержит какие-то условия. Что-то типа такого
SQL
1
SELECT T.Field1, T.Field2 FROM TABLE T WHERE T.Field3= 'Ваня'
на следующей строке нам нужно
SQL
1
SELECT T.Field1, T.Field2 FROM TABLE T WHERE T.Field3= 'Таня'
а потом
SQL
1
SELECT T.Field1, T.Field2 FROM TABLE T WHERE T.Field3= 'Федор'
пишем один раз в начале программы (а еще лучше прямо в дизайнере формы)
Delphi
1
Query1.SQL.Text := 'SELECT T.Field1, T.Field2 FROM table T WHERE T.Field3=:param1';
вот param1 это и есть параметр
для такого случая нам нужно только заполнить значение параметра и переоткрыть датасет
Delphi
1
2
Query1.Parameters.ParamByName('param1').Datatype := ftString;
Query1.Parameters.ParamByName('param1').Value := 'Таня';
все что в запросе начинается на двоеточие - это параметры
их нужно задавать
как задавать параметры написано в статье
если вы ее прочли, то точно должны знать
значит не прочли

:order_id это параметр
Delphi
1
2
Query1.Parameters.ParamByName('order_id').Datatype := ftinteger;
Query1.Parameters.ParamByName('order_id').Value := ADOTablezak.FieldByName('Номер заказа').Value;
Добавлено через 2 минуты
SQL
1
2
3
4
SELECT SUM(ZN.Количество*N.Цена) AS S
FROM Заказ_напитков ZN
INNER JOIN Напитки N ON (ZN.Напиток = N.Код_напитка)
WHERE ZN.заказ=:order_id
Добавлено через 2 минуты
SQL
1
2
3
4
SELECT SUM(ZB.Количество*B.Цена) AS S
FROM Заказ_блюд ZB
INNER JOIN Блюда B ON (ZB.Блюдо = B.Код_блюда)
WHERE ZB.заказ=:order_id
0
kerasa
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 56
05.06.2018, 22:59  [ТС] #39
krapotkin,
Delphi
1
2
3
4
5
6
7
8
9
procedure TDataModule1.ADOQuery5AfterScroll(DataSet: TDataSet);
begin
with datamodule1.ADOQuery5 do
begin
datamodule1.ADOQuery5.Parameters.ParamByName('order_id').Datatype := ftinteger;
datamodule1.ADOQuery5.Parameters.ParamByName('order_id').Value := ADOTablezak.FieldByName('Íîìåð Г§Г*ГЄГ*Г§Г*').Value;
open;
end;
end;
Не выводит результат(((
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,264
Записей в блоге: 13
06.06.2018, 07:12 #40
тут две ошибки, но на результат они не влияют
1. строку 3,4,8 надо убрать совсем
2. в методе класса обращение к переменной этого класса - это ошибка
так что вместо datamodule1.ADOQuery5 пишите просто ADOQuery5

3. а эта - влияет.
датасет нужно ПЕРЕОТКРЫТЬ. т.е. закрыть и открыть. Открытие уже открытого бесполезно.

4. эта вообще главная, но не успела проявиться еще из-за (3)
насколько я понял, вы хотите при перемещении по ADOTABLEZAK делать запросы на сумму по заказу
а процедура у васADOQUERY5Afterscroll.
не у того объекта обработчик-то!
тем более если вы в обработчике перемещения по ADOQuery5 вы переоткроете ADOQuery5, то опять сработает этот обработчик, который вызовет этот же обработчик, который этот обработчик вызовет еще раз, а там вызовется этот обработчик.........


И это все при условии, что вы поместили правильный запрос в ADOQuery5.SQL
давайте так. если у вас и после этого не будет работать.
1. вы показываете, что у вас в ADOQuery5.SQL
2. запрос, который сейчас в ADOQuery5.SQL вы запускаете в Access и показываете результат
3. показываете код, который получился после исправлений.
0
06.06.2018, 07:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2018, 07:12
Привет! Вот еще темы с решениями:

SQL-запрос: вывод столбцов за разные промежутки времени
Через делфи подключаюсь к БД. Оттуда в DBGrid вывожу таблицу с данными....

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

Вычисление суммы заказа клиента
У меня таблицы заказы с такими полями kod_zakaza ...

Сумма заказа sql
Доброго времени суток, хочу сделать подсчёт полной суммы заказа, так-как в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru