Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Deys85
0 / 0 / 0
Регистрация: 18.08.2012
Сообщений: 8
1

SQL запрос на вычисление остатков

13.09.2012, 21:47. Просмотров 2047. Ответов 9
Метки нет (Все метки)

Добрый вечер.

В БД (mdb) имеется таблица Регистр. В ней следующая структура:

Дата | Магазин | ВидТовара | Операция | Колво

со след данными:
25.03.2012 Магелан Хлеб Приход 40
25.03.2012 Василек Молоко Приход 100
26.03.2012 Магелан Хлеб Расход 25
27.03.2012 Василек Молоко Расход 50
28.03.2012 Магелан Хлеб Приход 10
... и т.д.

Для расчета остатков необходимо сумму прихода - сумма расхода по каждому магазину и каждому виду товара.

С помощью Excel делаю запрос к БД mdb.
SQL
1
2
SELECT SUM(Колво) FROM Регистр WHERE Магазин="Магелан" AND Операция = "Приход"
'аналогично на расход, затем нахожу разность. в Магазин подставляется переменная
Вопрос: возможно ли это все сделать одним запросом т.е. в одном запросе найти сумму прихода и отнять сумму расхода и выдать результат типа :
Магелан Хлеб 25
Василек Молоко 50

Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2012, 21:47
Ответы с готовыми решениями:

SQL запрос в vba
В общем есть запрос на обновление: UPDATE student SET student.N_gr =...

SQL запрос в VBA Excel
Добрый день! Прошу помощи... Создал SQL запрос. Вырезка: Select Case...

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

Sql запрос к листам excell
Здравствуйте! Пытаюсь решить задачу сравнения данных на двух листах эксель(на...

Нужно составить SQL запрос
Помогите правильно составить sql - запрос, чтобы вытянуть данные из базы...

9
analyst
435 / 142 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
13.09.2012, 22:05 2
То что приходит сразу в голову:
SQL
1
2
3
4
5
SELECT SUM(Колво)
FROM
(SELECT SUM(Колво) FROM Регистр WHERE Магазин="Магелан" AND Операция = "Приход"
UNION
SELECT -SUM(Колво) FROM Регистр WHERE Магазин="Магелан" AND Операция = "Расход") TABLE
1
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
13.09.2012, 22:08 3
как-то так...
SQL
1
2
3
4
SELECT Магазин, ВидТовара, 
SUM(IIf(Операция="Приход",Колво,-Колво)) AS mySum
FROM Регистр
GROUP BY Магазин, ВидТовара;
добавлю:
можно включить в этот запрос и предложение WHERE с отбором по определенному магазину и товару, но я бы оставил именно в таком виде - без WHERE считал итоги в recordset, а потом обрабатывал его в Excel
экономия времени получится значительная.

впрочем, многое зависит от задачи.
1
Deys85
0 / 0 / 0
Регистрация: 18.08.2012
Сообщений: 8
13.09.2012, 22:13  [ТС] 4
analyst: в конце TABLE что значит и что значит UNION?
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
13.09.2012, 22:14 5
добавил в предыдущий пост.
1
analyst
435 / 142 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
13.09.2012, 22:24 6
Цитата Сообщение от Deys85 Посмотреть сообщение
analyst: в конце TABLE что значит и что значит UNION?
Правильнее будет написать так:
SQL
1
2
3
4
5
SELECT SUM(COUNT)
FROM(
        SELECT SUM(Колво) AS COUNT FROM Регистр WHERE Магазин="Магелан" AND Операция = "Приход"
        UNION
        SELECT -SUM(Колво) AS COUNT FROM Регистр WHERE Магазин="Магелан" AND Операция = "Расход");
Union означает обединение двух запросов/таблиц/представлений с одинаковыми полями, а Table использовался как псевдоним, но похоже, что access его не поддерживает)
1
mobile
Эксперт MS Access
23029 / 13075 / 2722
Регистрация: 28.04.2012
Сообщений: 14,319
13.09.2012, 22:53 7
Лучший ответ Сообщение было отмечено как решение

Решение

T-SQL
1
2
3
SELECT  Магазин, ВидТовара, -(SUM(Колво*(Операция="Приход"))-SUM(Колво*(Операция="Расход"))) as Остаток
FROM Регистр
GROUP BY Магазин, ВидТовара;
Добавлено через 23 минуты
Цитата Сообщение от analyst Посмотреть сообщение
Union означает обединение двух запросов/таблиц/представлений с одинаковыми полями, а Table использовался как псевдоним, но похоже, что access его не поддерживает)
MS Access поддерживает и юнион и алиасы и все, что входит в стандарт ANSI-89. А если поставить соответствующую галочку, то и стандарт ANSI-92.
В варианте ADP и ADE поддерживаются и все современные стандарты.
3
Deys85
0 / 0 / 0
Регистрация: 18.08.2012
Сообщений: 8
13.09.2012, 22:56  [ТС] 8
Все! Всем спасибо за ответы. Проплюсовал всех.

Особенно analyst. Твой ответ в 21:24 то что нужно
0
ikki
призрак
2823 / 879 / 118
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
13.09.2012, 23:44 9
плюсы - это, конечно, хорошо
а вот то, что выбран самый неоптимальный вариант с тремя селектами - это, конечно, не оч.хорошо.
впрочем, все варианты рабочие.
1
analyst
435 / 142 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
14.09.2012, 03:03 10
Цитата Сообщение от mobile Посмотреть сообщение
MS Access поддерживает и юнион и алиасы и все, что входит в стандарт ANSI-89. А если поставить соответствующую галочку, то и стандарт ANSI-92.
В варианте ADP и ADE поддерживаются и все современные стандарты.
Принял к сведению)

Цитата Сообщение от ikki Посмотреть сообщение
плюсы - это, конечно, хорошо
а вот то, что выбран самый неоптимальный вариант с тремя селектами - это, конечно, не оч.хорошо.
впрочем, все варианты рабочие.
Видимо самый неоптимальный вариант - самый понятный) или подходящий для более общей задачи)
В прочем ваш запрос и запрос mobile- однозначно быстрее (на 3 миллионах записей разница была в 20% времени)!
2
14.09.2012, 03:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2012, 03:03

SQL-запрос на выборку в VBA
Здравствуйте! Есть такой запрос SQLText = "SELECT tblTreaty.TreatyID,...

sql запрос обработка в программе и в запросе
Здравствуйте уважаемые ГУРУ! Есть проблема с которой столкнулся первый раз :(...

SQL запрос к Oracle из Excel по диапазону
Здравствуйте! Прошу помощи! В VBA новичок. Подскажите как дописать макрос...


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

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

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