powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL запрос на вычисление остатков
17 сообщений из 17, страница 1 из 1
SQL запрос на вычисление остатков
    #37956797
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.

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

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

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

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

С помощью Excel делаю запрос к БД mdb.
Код: vbnet
1.
2.
SELECT sum(Колво) FROM Регистр where Магазин="Магелан" and Операция = "Приход"
'аналогично на расход, затем нахожу разность. в Магазин подставляется переменная



Вопрос: возможно ли это все сделать одним запросом т.е. в одном запросе найти сумму прихода и отнять сумму расхода и выдать результат типа :
Магелан Хлеб 25
Василек Молоко 50

Спасибо.
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956811
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT sum(iif(Операция="Приход";1;-1)*Колво) FROM Регистр where Магазин="Магелан"
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956835
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и что это получится. Опять же просуммируются только приходы. А необходимо от суммы прихода вычесть сумму расхода по каждому магазину и виду товара.
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956872
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deys85Опять же просуммируются только приходы.с чего? проанализируйте запрос или просто попробуйте
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956874
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо. Вопрос решен.

Решение:
Код: vbnet
1.
2.
3.
4.
5.
SELECT SUM(COUNT)
FROM(
        SELECT SUM(Колво) AS COUNT FROM Регистр WHERE Магазин="Магелан" AND Операция = "Приход"
        UNION
        SELECT -SUM(Колво) AS COUNT FROM Регистр WHERE Магазин="Магелан" AND Операция = "Расход") 



результат одно значение остатка для магазина по типу товара.
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956893
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тоже можно, но для больших таблиц вариант Akina будет работать все же быстрее
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37956921
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deys85,

Еще можно изменить логику, и в таблице поле со значением (Колво) хранить уже с нужным знаком в зависимости от (Операция), т.е. расходы хранятся со знаком минус, а отображаются - по абсолютной величине...
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37957002
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

ну не согласен, это упростит только данную выборку, а для всех остальных будет только голову морочить программисту
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37957038
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAndreTM,

ну не согласен, это упростит только данную выборку, а для всех остальных будет только голову морочить программисту

а мне кажется наоборот, во многих системах видел такую реализацию, начиная от банковских и кончая ERP
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37957220
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMЕще можно изменить логику, и в таблице поле со значением (Колво) хранить уже с нужным знаком в зависимости от (Операция), т.е. расходы хранятся со знаком минус, а отображаются - по абсолютной величине...
Shocker.Proне согласен, это упростит только данную выборку, а для всех остальных будет только голову морочить программисту
Если Приход/Расход - это исчерпывающий список операций, то хранение суммы со знаком правильнее. А поле операции вообще не нужно, и может быть удалено.
PS. если голова программиста путается в таких элементарных вещах - ему явно пора как минимум в отпуск...
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37957242
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я говорю все-таки про большие системы, а не наколенные.
Ты видел где-нибудь в расходной накладной отрицательные суммы? А понятие дебет/кредит (в двух разных столбцах и с ПОЛОЖИТЕЛЬНЫМИ значениями) тебе знакомо?

Спор поддерживать не буду, он ни к чему не приведет.
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37957244
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaAndreTMЕще можно изменить логику, и в таблице поле со значением (Колво) хранить уже с нужным знаком в зависимости от (Операция), т.е. расходы хранятся со знаком минус, а отображаются - по абсолютной величине...
Shocker.Proне согласен, это упростит только данную выборку, а для всех остальных будет только голову морочить программисту
Если Приход/Расход - это исчерпывающий список операций, то хранение суммы со знаком правильнее. А поле операции вообще не нужно, и может быть удалено.
PS. если голова программиста путается в таких элементарных вещах - ему явно пора как минимум в отпуск...

не совсем.
как мне видится, все операции над, к примеру, с товаром могут быть одни с плюсом, другие с минусом:
приход "+"
расход "-"
возврат "+"
перемещение "-"
списане "-"
и т.д

так что поле "операция" всетаки нужно, т.к может быть необходимость видеть всю динамику движения, а не только остаток
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37958536
Deys85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это в пример две операции. По факту таблица больше и имеет 5 операции, более 5 магазинов и видов товаров и + подвидов. Но таблица по подсчетам для данного участка за год накапливает около 60-65 тыс операций. т.е. впринципе по скорости не критично. Данный запрос выполняется на 50 тыс строк 1сек+-.

Так что для данной задаче вполне. А в дальнейшем когда знаний наберусь в SQL перепишу алгоритмы.
Знаки минус к продаже это мысль, надо обдумать не будут ли они на задумку влият :) Спасибо за совет :)
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37958593
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЯ говорю все-таки про большие системы, а не наколенные.
Ты видел где-нибудь в расходной накладной отрицательные суммы? А понятие дебет/кредит (в двух разных столбцах и с ПОЛОЖИТЕЛЬНЫМИ значениями) тебе знакомо?

Спор поддерживать не буду, он ни к чему не приведет.
Не в порядке спора, просто прояснение моей позиции.

Мы говорим именно о наколенке. Дебет/кредит - это немного из другой оперы. Склад - не совсем булгахтерия. Операций больше чем две? ну пусть остаётся, мне поля не жалко. Но это к слову...

Есть принципиально два подхода. Ты - адепт первого. Суммы положительные, а знак определяется операцией. Я в данном случае адепт второго - суммы со знаком.
Следствие твоего подхода - дополнительные вычисления при вычислениях. Следствие моего подхода - дополнительные вычисления при формировании вывода.
Я убеждён, что ускорение вычислений гораздо важнее ускорения взаимодействия с пользователем. Потому в наколенной системе хранение сумм со знаком - оправдано.
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37958601
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro , ну, не надо так рьяно-то

Я специально и оговорился, про разницу между формой хранения и формой отображения.
Тем более, что "ВидОперации" хранить надо тоже, это несомненно. Вот только ввод данных всё равно требует преобразований для занесения в базу, поэтому удобнее приписывать знак именно на этом этапе. А вывод информации - это отчет (ваше упоминание про оборотную ведомость - как раз в строку), и при формировании его подставить/убрать знак тоже не проблема. При этом быстродействие обычно требуется не для ввода (особенно интерактивного) и не для вывода (вы же выходные формы формируете не ежесекундно), а именно для бизнес-логики и внутренних выборок. И здесь отказ от анализа дополнительных полей вполне может вести к увеличению быстродействия на порядок...
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37958635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
был в плохом настроении
...
Рейтинг: 0 / 0
SQL запрос на вычисление остатков
    #37958636
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ШокерЧетверг-обед и пятница-вечер - несомненно, две очень большие разницы

Ну, мы и не обиделись ведь - сами многие такие же
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / SQL запрос на вычисление остатков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]